前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql性能分析工具show profile(翻译)

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

作者头像
跑马溜溜的球
发布2022-03-07 15:07:27
5620
发布2022-03-07 15:07:27
举报
文章被收录于专栏:日积月累1024

原文链接请猛击这里

SHOW PROFILE 语法

代码语言:javascript
复制
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

代码语言:javascript
复制
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信息也会随之消失。

代码语言:javascript
复制
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信息,详情可参见这里。 下面两条语句产生的结果是一样的。

代码语言:javascript
复制
SHOW PROFILE FOR QUERY 2;

SELECT STATE, FORMAT(DURATION, 6) AS DURATION
FROM INFORMATION_SCHEMA.PROFILING
WHERE QUERY_ID = 2 ORDER BY SEQ;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档