mysql查询单条语句_如何使用mysql profiling功能分析单条查询语句

Mysql从5.1版本开始引入show profile来剖析单条语句功能

一、 查看是否支持这个功能

yes表示支持

mysql> show variables like 'have_profiling';+----------------+-------+

| Variable_name | Value |

+----------------+-------+

| have_profiling | YES |

+----------------+-------+

1 row in set (0.01 sec)

二、使用步骤

1.在 sql命令行中输入:set profiling=1;来开启(当前会话关闭前,只需要执行一次)

mysql> set profiling=1;

Query OK,0 rows affected, 1 warning (0.00 sec)

2.然后在服务器上执行你的SQL语句,都会被测量其消耗的时间和其他一些查询执行状态变更相关的数据

mysql> select count(*) from he_store_discount;+----------+

| count(*) |

+----------+

| 1 |

+----------+

1 row in set (0.00 sec)

3. 然后再执行:show prifiles;命令,所有的查询SQL都会被列出来

mysql>show profiles;+----------+------------+----------------------------------------+

| Query_ID | Duration | Query |

+----------+------------+----------------------------------------+

| 1 | 0.00013000 | select count(*) from he_store_discount |

| 2 | 0.00290900 | show databases |

| 3 | 0.00016200 | SELECT DATABASE() |

| 4 | 0.00052800 | show databases |

| 5 | 0.00204500 | show tables |

| 6 | 0.00027000 | select count(*) from he_store_discount |

+----------+------------+----------------------------------------+

6 rows in set, 1 warning (0.00 sec)

4.然后再根据编号(即Query_ID)查询具体SQL的执行过程

mysql> show profile for query 1;+---------------+----------+

| Status | Duration |

+---------------+----------+

| starting | 0.000091 |

| freeing items | 0.000028 |

| cleaning up | 0.000011 |

+---------------+----------+

3 rows in set, 1 warning (0.01sec)

mysql> show profile for query 2;+----------------------+----------+

| Status | Duration |

+----------------------+----------+

| starting | 0.000044 |

| checking permissions | 0.000011 |

| Opening tables | 0.000039 |

| init | 0.000013 |

| System lock | 0.000008 |

| optimizing | 0.000006 |

| statistics | 0.000012 |

| preparing | 0.000012 |

| executing | 0.002696 |

| Sending data | 0.000021 |

| end | 0.000004 |

| query end | 0.000006 |

| closing tables | 0.000003 |

| removing tmp table | 0.000006 |

| closing tables | 0.000003 |

| freeing items | 0.000017 |

| cleaning up | 0.000008 |

+----------------------+----------+

17 rows in set, 1 warning (0.00sec)

mysql> show profile for query 3;+----------------------+----------+

| Status | Duration |

+----------------------+----------+

| starting | 0.000046 |

| checking permissions | 0.000009 |

| Opening tables | 0.000008 |

| init | 0.000014 |

| optimizing | 0.000008 |

| executing | 0.000012 |

| end | 0.000006 |

| query end | 0.000008 |

| closing tables | 0.000007 |

| freeing items | 0.000027 |

| cleaning up | 0.000017 |

+----------------------+----------+

11 rows in set, 1 warning (0.00 sec)

5.当查到最耗时的线程状态时,可以进一步选择all或者cpu,block io,page faults等明细类型来查看mysql在每个线程状态中使用什么资源上耗费了过高的时间:

mysql> show profile all for query 1;+---------------+----------+----------+------------+-------------------+---------------------+--------------+---------------+---------------+-------------------+-------------------+-------------------+-------+------------------+--------------+-------------+

| Status | Duration | CPU_user | CPU_system | Context_voluntary | Context_involuntary | Block_ops_in | Block_ops_out | Messages_sent | Messages_received | Page_faults_major | Page_faults_minor | Swaps | Source_function | Source_file | Source_line |

+---------------+----------+----------+------------+-------------------+---------------------+--------------+---------------+---------------+-------------------+-------------------+-------------------+-------+------------------+--------------+-------------+

| starting | 0.000091 | 0.000073 | 0.000012 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NULL | NULL | NULL |

| freeing items | 0.000028 | 0.000016 | 0.000011 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | mysql_parse | sql_parse.cc | 5593 |

| cleaning up | 0.000011 | 0.000008 | 0.000003 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | dispatch_command | sql_parse.cc | 1902 |

+---------------+----------+----------+------------+-------------------+---------------------+--------------+---------------+---------------+-------------------+-------------------+-------------------+-------+------------------+--------------+-------------+

3 rows in set, 1 warning (0.00sec)

mysql> show profile cpu for query 1;+---------------+----------+----------+------------+

| Status | Duration | CPU_user | CPU_system |

+---------------+----------+----------+------------+

| starting | 0.000091 | 0.000073 | 0.000012 |

| freeing items | 0.000028 | 0.000016 | 0.000011 |

| cleaning up | 0.000011 | 0.000008 | 0.000003 |

+---------------+----------+----------+------------+

3 rows in set, 1 warning (0.00sec)

mysql> show profile block io for query 1;+---------------+----------+--------------+---------------+

| Status | Duration | Block_ops_in | Block_ops_out |

+---------------+----------+--------------+---------------+

| starting | 0.000091 | 0 | 0 |

| freeing items | 0.000028 | 0 | 0 |

| cleaning up | 0.000011 | 0 | 0 |

+---------------+----------+--------------+---------------+

3 rows in set, 1 warning (0.00sec)

mysql> show profile page faults for query 1;+---------------+----------+-------------------+-------------------+

| Status | Duration | Page_faults_major | Page_faults_minor |

+---------------+----------+-------------------+-------------------+

| starting | 0.000091 | 0 | 0 |

| freeing items | 0.000028 | 0 | 0 |

| cleaning up | 0.000011 | 0 | 0 |

+---------------+----------+-------------------+-------------------+

3 rows in set, 1 warning (0.00 sec)

上面的输出中可以以很高的精度显示了查询的响应时间,列出了查询执行的每个步骤花费的时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值