mysql profiling详解_mysql-profiling详解

mysql profiling详解_mysql-profiling详解要想优化一条 Query 我们就需要清楚的知道这条 Query 的性能瓶颈到底在哪里 是消耗的 CPU 计算太多 还是需要的的 IO 操作太多 要想能够清楚的了解这些信息 在 MySQL5 0 和 MySQL5 1 正式版中已经可以非常容易做到了 那就是通过 QueryProfile 功能 MySQL 的 QueryProfile 是一个使用非常方便的 Query 诊断分析工具 通过该工具

要想优化一条 Query,我们就需要清楚的知道这条 Query 的性能瓶颈到底在哪里,是消耗的 CPU计算太多,还是需要的的 IO 操作太多?要想能够清楚的了解这些信息,在 MySQL 5.0 和 MySQL 5.1正式版中已经可以非常容易做到了,那就是通过 Query Profiler 功能。

MySQL 的 Query Profiler 是一个使用非常方便的 Query 诊断分析工具,通过该工具可以获取一条Query 在整个执行过程中多种资源的消耗情况,如 CPU,IO,IPC,SWAP 等,以及发生的 PAGE FAULTS,CONTEXT SWITCHE 等等,同时还能得到该 Query 执行过程中 MySQL 所调用的各个函数在源文件中的位置。

下面我们看看 Query Profiler 的具体用法。

1、 开启 profiling 参数

mysql> set profiling=1;

Query OK, 0 rows affected

通过执行 “set profiling”命令,可以开启关闭 Query Profiler 功能。

2、 执行 Query

72ce5ac3241ac24a77d70d266e51b316.gif

mysql> select * from user;

+—-+———+——+———-+—————+—————–+——+———————+————-+

| id | account | name | password | department_id | department_name | salt | create_time | update_time |

+—-+———+——+———-+—————+—————–+——+———————+————-+

| 1 | 1 | 1 | 1 | 1 | 1 | 1s | 2018-10-01 14:46:55 | NULL |

+—-+———+——+———-+—————+—————–+——+———————+————-+

1 row in set

3fb26b3e59a690e133133448d47eaea3.gif

在开启 Query Profiler 功能之后,MySQL 就会自动记录所有执行的 Query 的 profile 信息了。

3、获取系统中保存的所有 Query 的 profile 概要信息

7403e2b4ffc0fd58a28e315b95bc3c98.gif

mysql> show profiles;

+———-+————+—————————————————————–+

| Query_ID | Duration | Query |

+———-+————+—————————————————————–+

| 1 | 0.00 | select * from user |

| 2 | 0.00023 | select * from user |

| 3 | 0.00019475 | select * from user |

| 4 | 0.000192 | select * from user |

| 5 | 8.725E-5 | select * from user where id=’1′

select * from user where id=’1′ |

| 6 | 0.00028875 | select * from user where id=1 |

| 7 | 7.5E-5 | set profiling=1 |

| 8 | 0.00020075 | select * from user |

+———-+————+—————————————————————–+

8 rows in set

7346fad925b845188a71756d18cc571b.gif

通过执行 “SHOW PROFILE” 命令获取当前系统中保存的多个 Query 的 profile 的概要信息。

4、针对单个 Query 获取详细的 profile 信息。

在获取到概要信息之后,我们就可以根据概要信息中的 Query_ID 来获取某个 Query 在执行过程中

详细的 profile 信息了,具体操作如下:

mysql> show profile cpu,block io for query 8;+———————-+———-+———-+————+————–+—————+

| Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |

+———————-+———-+———-+————+————–+—————+

| starting | 3.1E-5 | 0 | 0 | NULL | NULL |

| checking permissions | 6E-6 | 0 | 0 | NULL | NULL |

| Opening tables | 1.4E-5 | 0 | 0 | NULL | NULL |

| System lock | 6E-6 | 0 | 0 | NULL | NULL |

| init | 1.3E-5 | 0 | 0 | NULL | NULL |

| optimizing | 3E-6 | 0 | 0 | NULL | NULL |

| statistics | 8E-6 | 0 | 0 | NULL | NULL |

| preparing | 5E-6 | 0 | 0 | NULL | NULL |

| executing | 1E-6 | 0 | 0 | NULL | NULL |

| Sending data | 4.6E-5 | 0 | 0 | NULL | NULL |

| end | 3E-6 | 0 | 0 | NULL | NULL |

| query end | 2E-6 | 0 | 0 | NULL | NULL |

| closing tables | 5E-6 | 0 | 0 | NULL | NULL |

| freeing items | 5.4E-5 | 0 | 0 | NULL | NULL |

| logging slow query | 2E-6 | 0 | 0 | NULL | NULL |

| cleaning up | 3E-6 | 0 | 0 | NULL | NULL |

+———————-+———-+———-+————+————–+—————+

16 rows in set

上面的例子中是获取 CPU 和 Block IO 的消耗,非常清晰,对于定位性能瓶颈非常适用。希望得到取其他的信息,都可以通过执行 “SHOW PROFILE * FOR QUERY n” 来获取,各位读者朋友可以自行测试熟悉。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218924.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午11:09
下一篇 2026年3月17日 下午11:09


相关推荐

  • android expandablelistview横向,expandableListView 总结[通俗易懂]

    android expandablelistview横向,expandableListView 总结[通俗易懂]实现效果图:expandableListViewgroupIndicator图片默认是在左边,而且比较难看,而我要的是实现groupIndicator在右边自定义图片,换图片最简单的就是直接copy系统@android:drawable/expander_group?android:attr/expandableListPreferredItemIndicatorLeft?android…

    2022年6月16日
    37
  • ROS机器人操作系统学习

    ROS机器人操作系统学习ROS 是全球范围内智能机器人领域最为前沿的开源操作系统 ROS 作为机器人的大脑 广泛的应用于多种不同功能的机器人的研发 包括智能扫地机器人 语音服务机器人 送餐机器人 物流配送机器人等 学习和掌握 ROS 已经成为从事机器人开发与应用相关工作的必备技能 本课程面向智能移动机器人和自动驾驶技术感兴趣的同学 以 TURTLEBOT 机器人为载体 系统性地介绍 RoS 机器人操作系统的基本原理和核心功能 本课程以动手操作为中心 零基础轻松入门并掌握 ROS 系统的基本操作和运动控制实现方法 同时支持机器人远程控制 让你可以随

    2026年3月16日
    1
  • pytest skipif_pytest不是内部或外部命令

    pytest skipif_pytest不是内部或外部命令前言pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者您希望失败的测试功能Skip和xfail:处理那些不会成功的测试用例你可以对那些在某些特定平台上不能运行的测试用

    2022年7月30日
    14
  • 面向对象和面向过程的区别理解_c是面向对象还是面向过程

    面向对象和面向过程的区别理解_c是面向对象还是面向过程一、面向对象和面向过程面向对象面向过程编程是一种以过程为中心的编程思想,分析出解决问题的步骤,然后用函数把这些步骤一步一步实现。面向过程编程,数据和对数据的操作是分离的,函数本身只

    2022年8月16日
    7
  • 拆解Manus:沙盒架构深度解析

    拆解Manus:沙盒架构深度解析

    2026年3月15日
    3
  • 在目录下打开命令行_如何用命令行打开文件夹

    在目录下打开命令行_如何用命令行打开文件夹用命令行打开指定目录。基本指令nautilus+路径命令可以在ubuntu上直接打开此路径的目录。如nautilus~/workspace/。打开win格式的路径在Windows上的路径为反斜线\,在ubuntu命令行是无法识别的,此时需要将\转换为/。使用sed命令可以自动转换。以下命令可以打开/home/eric.cai/Workspace/目录:nautilus$(echo’\home\eric.cai\Workspace’|sed‘s+\\+/+g’)写成

    2022年10月15日
    4

发表回复

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

关注全栈程序员社区公众号