mysql性能分析工具show profile(翻译)

原文链接请猛击这里

SHOW PROFILE 语法

SHOW PROFILE [type [, type] ... ]
    [FOR QUERY n]
    [LIMIT row_count [OFFSET offset]]

type:
    ALL
  | BLOCK IO
  | CONTEXT SWITCHES
  | CPU
  | IPC
  | MEMORY
  | PAGE FAULTS
  | SOURCE
  | SWAPS

SHOW PROFILE以及SHOW PROFILES语句可以显示当前会话过程中执行的sql语句的性能(profiling)信息。

开启profiling需要设置profiling变量为1,该变量的默认值是0

mysql> SET profiling = 1;

SHOW PROFILES列出了最近发送到服务端的sql语句。列表长度由变量profiling_history_size控制,默认值为15,最大值为100。如果设为0相当于关闭profiling功能。

除SHOW PROFILE和SHOW PROFILES之外,所有sql语句的性能信息都会被记录,甚至包括有错误的语句。

SHOW PROFILE可以列出单条语句的详细信息。当不指定FOR QUERY n子句时,将输出最近执行的sql语句性能信息 。如果使用了FOR QUERY n,SHOW PROFILE会列出第n条sql的性能信息。n指的是SHOW PROFILES中列出的Query_ID值。

LIMIT row_count子句用于限制输出行数。

默认情况下,SHOW PROFILE显示StatusDuration两列信息。Status值的含义可以参见这里

使用type选项可以显示额外信息,可选的值如下:
- ALL:展现所有信息
- BLOCK IO:阻塞的输入输出次数
- CONTEXT SWITCHES:上下文切换次数
- CPU:用户及系统CPU耗时
- IPC:收发消息次数(个人理解是特指进程间通信)
- MEMORY:目前无用
- SOURCE:列出相应操作对应的函数名及其在源码中的调用位置(行数)
- SWAPS:swap次数

profiling是会话级的,当会话结束,与之相关的profiling信息也会随之消失。

mysql> SELECT @@profiling;
+-------------+
| @@profiling |
+-------------+
|           0 |
+-------------+
1 row in set (0.00 sec)

mysql> SET profiling = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> DROP TABLE IF EXISTS t1;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CREATE TABLE T1 (id INT);
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW PROFILES;
+----------+----------+--------------------------+
| Query_ID | Duration | Query                    |
+----------+----------+--------------------------+
|        0 | 0.000088 | SET PROFILING = 1        |
|        1 | 0.000136 | DROP TABLE IF EXISTS t1  |
|        2 | 0.011947 | CREATE TABLE t1 (id INT) |
+----------+----------+--------------------------+
3 rows in set (0.00 sec)

mysql> SHOW PROFILE;
+----------------------+----------+
| Status               | Duration |
+----------------------+----------+
| checking permissions | 0.000040 |
| creating table       | 0.000056 |
| After create         | 0.011363 |
| query end            | 0.000375 |
| freeing items        | 0.000089 |
| logging slow query   | 0.000019 |
| cleaning up          | 0.000005 |
+----------------------+----------+
7 rows in set (0.00 sec)

mysql> SHOW PROFILE FOR QUERY 1;
+--------------------+----------+
| Status             | Duration |
+--------------------+----------+
| query end          | 0.000107 |
| freeing items      | 0.000008 |
| logging slow query | 0.000015 |
| cleaning up        | 0.000006 |
+--------------------+----------+
4 rows in set (0.00 sec)

mysql> SHOW PROFILE CPU FOR QUERY 2;
+----------------------+----------+----------+------------+
| Status               | Duration | CPU_user | CPU_system |
+----------------------+----------+----------+------------+
| checking permissions | 0.000040 | 0.000038 |   0.000002 |
| creating table       | 0.000056 | 0.000028 |   0.000028 |
| After create         | 0.011363 | 0.000217 |   0.001571 |
| query end            | 0.000375 | 0.000013 |   0.000028 |
| freeing items        | 0.000089 | 0.000010 |   0.000014 |
| logging slow query   | 0.000019 | 0.000009 |   0.000010 |
| cleaning up          | 0.000005 | 0.000003 |   0.000002 |
+----------------------+----------+----------+------------+
7 rows in set (0.00 sec)

注意

在某些系统上,profiling只有部分功能生效,比如windows系统。此外,profiling是进程级的而非线和级别。这意味着其它线>>程的一些动作影响你在profiling中看到的执行时间信息。

你也可以从INFORMATION_SCHEMA库的PROFILING表获取profiling信息,详情可参见这里
下面两条语句产生的结果是一样的。

SHOW PROFILE FOR QUERY 2;

SELECT STATE, FORMAT(DURATION, 6) AS DURATION
FROM INFORMATION_SCHEMA.PROFILING
WHERE QUERY_ID = 2 ORDER BY SEQ;
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值