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 日

相关推荐

  • 小程序xcxCode逆向分析

    数据采集与xcxCode解密分析 一、声明 本文旨在提供学术交流,不应用于其他任何场合。文章中不包含完整代码,所有涉及的数据包内容、敏感网址和数据接口均已进行脱敏处理,严禁用于商业或非法活动,由此引起的后果与作者无关。未经授权,禁止转载或修改后传播本文,作者不承担因使用本文技术导致的任何后果。本文为原创,作者署名为小白,敬请尊重。 二、工具介绍 mitmpr…

    2024 年 12 月 26 日
    56700
  • 【java-数据结构篇】揭秘 Java LinkedList:链表数据结构的 Java 实现原理与核心概念

    我的个人主页我的专栏:Java-数据结构 ,希望能帮助到大家!!!点赞❤ 收藏❤ 目录 1. Java LinkedList 基础 1.1 LinkedList 简介1.2 LinkedList 的实现原理1.3 LinkedList 与 ArrayList 的区别 2. 链表基础 2.1 链表的定义与种类2.2 单链表与双链表的区别2.3 循环链表与普通链…

    2025 年 1 月 10 日
    42700
  • 详解:促销系统整体规划

    大家好,我是汤师爷~ 今天聊聊促销系统整体规划。 各类促销活动的系统流程,可以抽象为3大阶段: B端促销活动管理:商家运营人员在后台系统中配置和管理促销活动,包括设定活动基本信息、使用规则、选择适用商品等核心功能。 C端促销活动参与:消费者在前台系统中浏览和参与促销活动,并在下单时获得相应的价格优惠或其他权益。 促销效果分析:通过促销活动的数据采集和分析功能…

    2025 年 1 月 12 日
    41000
  • PostgreSQL 的系统要求

    title: PostgreSQL 的系统要求date: 2024/12/25updated: 2024/12/25author: cmdragon excerpt:PostgreSQL 是一款功能强大的开源关系型数据库,广泛应用于企业应用、数据分析和互联网服务中。为了在不同的硬件和软件环境中顺利运行,PostgreSQL 对系统的要求也各有不同。了解 Po…

    2024 年 12 月 30 日
    41800
  • 在eclipse中创建JavaWeb项目

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

    2024 年 12 月 26 日
    50200

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信