MySQL 优化利器 SHOW PROFILE 的实现原理

背景

近期,我遇到了一个案例,涉及到通过可传输表空间的方式导入一个体积达4GB的表,整个过程耗时13分钟。通过使用PROFILE进行性能分析,意外发现大部分时间都耗费在了System lock阶段。

mysql> set profiling=1; Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> alter table sbtest2 import tablespace; Query OK, 0 rows affected (13 min 8.99 sec)
mysql> show profile for query 1; +--------------------------------+------------+
| Status | Duration |
+--------------------------------+------------+
| starting | 0.000119 |
| Executing hook on transaction | 0.000004 |
| starting | 0.000055 |
| checking permissions | 0.000010 |
| discard_or_import_tablespace | 0.000007 |
| Opening tables | 0.000156 |
| System lock | 788.966338 |
| end | 0.007391 |
| waiting for handler commit | 0.000041 |
| waiting for handler commit | 0.011179 |
| query end | 0.000022 |
| closing tables | 0.000019 |
| waiting for handler commit | 0.000031 |
| freeing items | 0.000035 |
| cleaning up | 0.000043 |
+--------------------------------+------------+ 15 rows in set, 1 warning (0.03 sec)

同时,在执行SQL的过程中,show processlist显示的状态也是System lock

mysql> show processlist; +----+-----------------+-----------+--------+---------+------+------------------------+---------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------+-----------+--------+---------+------+------------------------+---------------------------------------+
| 5 | event_scheduler | localhost | NULL | Daemon | 818 | Waiting on empty queue | NULL |
| 10 | root | localhost | sbtest | Query | 648 | System lock | alter table sbtest2 import tablespace |
| 14 | root | localhost | NULL | Query | 0 | init | show processlist |
+----+-----------------+-----------+--------+---------+------+------------------------+---------------------------------------+ 3 rows in set, 1 warning (0.00 sec)

这种状态显示实际上具有很大的误导性。

接下来,我们将从SHOW PROFILE的基本用法出发,深入源码分析其实现原理,并探讨案例中的表空间导入操作为何大部分耗时集中在System lock阶段。

SHOW PROFILE 的基本用法

让我们通过一个示例来了解SHOW PROFILE的用法。

# 开启 Profiling
mysql> set profiling=1; Query OK, 0 rows affected, 1 warning (0.00 sec)
# 执行需要分析的 SQL
mysql> select count(*) from slowtech.t1; +----------+
| count(*) |
+----------+
| 1048576 |
+----------+ 1 row in set (1.09 sec)
# 通过 show profiles 查看 SQL 对应的 Query_ID
mysql> show profiles; +----------+------------+----------------------------------+
| Query_ID | Duration | Query |
+----------+------------+----------------------------------+
| 1 | 1.09378600 | select count(*) from slowtech.t1 |
+----------+------------+----------------------------------+ 1 row in set, 1 warning (0.00 sec)
# 查看该 SQL 各个阶段的执行耗时情况,其中,1 是该 SQL 对应的 Query_ID
mysql> show profile for query 1; +--------------------------------+----------+
| Status | Duration |
+--------------------------------+----------+
| starting | 0.000157 |
| Executing hook on transaction | 0.000009 |
| starting | 0.000020 |
| checking permissions | 0.000012 |
| Opening tables | 0.000076 |
| init | 0.000011 |
| System lock | 0.000026 |
| optimizing | 0.000013 |
| statistics | 0.000033 |
| preparing | 0.000032 |
| executing | 1.093124 |
| end | 0.000025 |
| query end | 0.000013 |
| waiting for handler commit | 0.000078 |
| closing tables | 0.000048 |
| freeing items | 0.000076 |
| cleaning up | 0.000037 |
+--------------------------------+----------+ 17 rows in set, 1 warning (0.01 sec)

如果指定all,还会输出更详细的统计信息,包括CPU、上下文切换、磁盘IO、IPC(进程间通信)发送/接收的消息数量、页面故障次数

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4446.html

(0)
LomuLomu
上一篇 2024 年 12 月 26 日
下一篇 2024 年 12 月 27 日

相关推荐

  • Python数据结构与算法分析 第3版PDF、EPUB免费下载

    适读人群 :1. 希望学习数据结构和算法的Python用户; 2. 计算机专业的学生和老师。 只有洞彻数据结构与算法,才能真正精通Python!热门计算机科学教材,华盛顿大学、北京大学等多家高校采用,让你在代码编写的战场上所向披靡! 电子版仅供预览,下载后24小时内务必删除,支持正版,喜欢的请购买正版书籍 点击原文去下载 书籍信息 作者: [美] 布拉德利·…

    2025 年 1 月 7 日
    35500
  • java: JDK isn‘t specified for module ‘product-service‘问题解决

    目录 问题 解决方法 1.打开File->Project Structure… 2.将Project SDK修改为17 Oracle OpenJDK 17.0.12,并Apply,OK 问题 添加module后报错:java: JDK isn’t specified for module ‘product-service’ 查看pom.xml文件也添加了…

    2025 年 1 月 19 日
    32500
  • 【永久激活】IDEA 2024激活破解保姆级教程,附激活码+工具,亲测可用

    IntelliJ IDEA 是 Java 编程语言的集成开发环境,被公认为最好的 Java 开发工具之一。本文分享通过脚本免费激活 IDEA 等 Jetbrains 全家桶工具,支持 2021 以上的版本包括最新版本。 一、下载并安装 IDEA 大家可以直接在 JetBrains 官网下载最新版本的 IDEA。安装步骤非常简单,按照提示一步一步进行即可。 二…

    未分类 2024 年 6 月 23 日
    1.5K00
  • 在eclipse中创建JavaWeb项目

    开启项目之旅:初始化开发环境 构建项目框架:创建新项目 配置项目细节:选择项目配置 当首次配置Tomcat时,界面会显示如下 继续操作:点击下一步 实际上,这一步也可以直接点击“Next”继续 完成项目创建:最终界面 至此,项目创建成功 构建基础架构:三层架构示例 实体类(Entity)代码: package com.zuxia.entity; public…

    2024 年 12 月 26 日
    37200
  • 基于Java的大疆无人机云端控制开发指南

    欢迎来到技术探索者的开发空间更多精彩内容请访问我的技术博客 开发者笔记-CSDN博客目录前言开发准备工作搭建开发环境注册大疆开发者账户获取大疆开发工具包大疆SDK深度解析SDK分类与特性云端API运行机制Java控制无人机实战工程创建与依赖配置认证信息设置设备连接流程飞行指令实现影像系统操作示例代码与场景应用完整控制程序行业应用实例疑难问题解答连接异常处理编…

    2025 年 5 月 15 日
    51600

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信