mysql profile 学习笔记

mysql profile 简介

show profileshow profiles语句,可以用来显示SQL语句执行期间各种资源的使用信息。

注意:
这些语句从版本5.6.7开始就不建议使用了,并且可能在下一个release版本中删除。后续可以通过Performance Schema来替代这些语句。具体可以参考:Profiling Using Performance Schema

show profiles

show profiles 展示了服务器最近收到的语句列表。 列表的大小可以通过调整profiling_history_size来调整,默认大小是15,最大值是100。如果设置为0,则和关闭profile功能是一样的。

举个例子:

1
2
3
4
5
6
7
8
9
10
mysql> show profiles;
+----------+------------+---------------------------------------------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+---------------------------------------------------------------------------+
| 1 | 0.00020000 | SET global profiling = 1 |
| 2 | 0.00054500 | SELECT * FROM employees WHERE first_name='Mary' AND last_name LIKE '%man' |
| 3 | 0.00046600 | SELECT * FROM employees WHERE first_name='Mary' AND last_name LIKE '%man' |
| 4 | 0.00063500 | SELECT * FROM employees WHERE first_name='Mary' AND last_name LIKE '%man' |
+----------+------------+---------------------------------------------------------------------------+
4 rows in set, 1 warning (0.00 sec)

show profile

profile 语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 可以显示一个SQL语句的详细信息。如果不带for query n字句,输出的结果是最近一条语句的相关信息。如果包含for query n字句,则show profile显示语句n的相关信息。 这里的nshow profiles数据结果里面Query_ID列的值。

默认情况下show profile只显示StatusDuration列。Status列的值和SHOW PROCESSLIST输出结果里面的列Status的值类似,但有一点小的区别,具体可以查看Section 8.14, “Examining Thread Information”

可以通过指定type值来获取你关心的信息。

  • ALL 展示所有信息
  • BLOCK IO 展示阻塞的输入输出操作的个数
  • CONTEXT SWITCHES 展示主动和被动的上下文切换次数。
  • CPU 展会用户和系统的CPU使用次数。
  • IPC 展示消息发送和接收的次数
  • MEMORY 暂时没有实现
  • PAGE FAULTS 展示发生缺页错误次数。
  • SOURCE 展示源代码中的函数名称,以及函数发生的文件的名称和行号
  • SWAPS 展示发生内存swap的次数。

查看并开启profile

查看

1
2
3
4
5
6
mysql> select @@profiling;
+-------------+
| @@profiling |
+-------------+
| 0 |
+-------------+

上面的语句执行结果展示了是否开启了profile功能。默认是关闭的。

开启

1
2
3
SET profiling = 1;
or
SET global profiling = 1;

例子

可以通过执行一些sql语句,然后通过profile来查看这些语句的执行情况。

1
2
3
mysql> SELECT * FROM employees WHERE first_name='Mary' AND last_name LIKE '%man';
mysql> SELECT * FROM employees WHERE first_name='Mary' AND last_name LIKE '%man';
mysql> SELECT * FROM employees WHERE first_name='Mary' AND last_name LIKE '%man';

执行profile分析

1
2
3
4
5
6
7
8
9
10
11
mysql> SHOW PROFILE CPU FOR QUERY 7;
+----------------+----------+----------+------------+
| Status | Duration | CPU_user | CPU_system |
+----------------+----------+----------+------------+
| starting | 0.003667 | 0.000094 | 0.000977 |
| query end | 0.000015 | 0.000009 | 0.000007 |
| closing tables | 0.000007 | 0.000004 | 0.000001 |
| freeing items | 0.000019 | 0.000009 | 0.000010 |
| cleaning up | 0.000032 | 0.000020 | 0.000013 |
+----------------+----------+----------+------------+
5 rows in set, 1 warning (0.00 sec)
文章目录
  1. 1. mysql profile 简介
  2. 2. show profiles
  3. 3. show profile
    1. 3.1. profile 语法
  4. 4. 查看并开启profile
    1. 4.1. 查看
    2. 4.2. 开启
  5. 5. 例子
|