慢查询日志提供花费较长时间执行查询的准备信息,而在数据库中大部分的查询都需要一个非常短的时间来执行。响应时间分布这个功能就是用于分析信息,根据查询执行的时间,通过计数和显示查询花费多长时间的一个工具。用户可以自己定义时间间隔,把0到无穷大分成较小的时间间隔,然后收集其执行时间在每个时间间隔的数目。在复制环境中需要注意,服务器不考虑任何由从服务器SQL线程执行的查询(无论这些SQL是否为缓慢)的时间分布。
通过此功能,我们可以对整体的SQL响应时间分布更加直观,更加了解数据库当前的状态。
安装插件
mysql> INSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT SONAME 'query_response_time.so';
mysql> INSTALL PLUGIN QUERY_RESPONSE_TIME SONAME 'query_response_time.so';
mysql> INSTALL PLUGIN QUERY_RESPONSE_TIME_READ SONAME 'query_response_time.so';
mysql> INSTALL PLUGIN QUERY_RESPONSE_TIME_WRITE SONAME 'query_response_time.so';
mysql> SHOW PLUGINS;
...
| QUERY_RESPONSE_TIME | ACTIVE | INFORMATION SCHEMA | query_response_time.so | GPL |
| QUERY_RESPONSE_TIME_AUDIT | ACTIVE | AUDIT | query_response_time.so | GPL |
| QUERY_RESPONSE_TIME_READ | ACTIVE | INFORMATION SCHEMA | query_response_time.so | GPL |
| QUERY_RESPONSE_TIME_WRITE | ACTIVE | INFORMATION SCHEMA | query_response_time.so | GPL |
+-----------------------------+----------+--------------------+------------------------+---------+
开启查询响应时间状态
mysql> SET GLOBAL query_response_time_stats = on;
该参数默认不开启,要想mysql启动就启用此参数,需要在配置文件中添加
[mysqld]
query_response_time_stats =on
默认会将记录的状态保存到INFORMATION_SCHEMA库中的QUERY_RESPONSE_TIME,QUERY_RESPONSE_TIME_READ, QUERY_RESPONSE_TIME_WRITE 3张表中,以内存表的方式存在,可以通过SELECT来查看。
mysql> SELECT * from INFORMATION_SCHEMA.QUERY_RESPONSE_TIME;
+----------------+--------+----------------+
| TIME | COUNT | TOTAL |
+----------------+--------+----------------+
| 0.000001 | 0 | 0.000000 |
| 0.000010 | 708 | 0.003590 |
| 0.000100 | 75632 | 4.249300 |
| 0.001000 | 107033 | 14.686619 |
| 0.010000 | 369 | 1.159361 |
| 0.100000 | 321 | 8.595504 |
| 1.000000 | 0 | 0.000000 |
| 10.000000 | 0 | 0.000000 |
| 100.000000 | 0 | 0.000000 |
| 1000.000000 | 0 | 0.000000 |
| 10000.000000 | 0 | 0.000000 |
| 100000.000000 | 0 | 0.000000 |
| 1000000.000000 | 0 | 0.000000 |
| TOO LONG | 0 | TOO LONG |
+----------------+--------+----------------+
14 rows in set (0.00 sec)
相关参数设置
mysql> SHOW VARIABLES LIKE 'QUERY_RESPONSE_TIME%';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| query_response_time_flush | OFF |
| query_response_time_range_base | 10 |
| query_response_time_stats | ON |
+--------------------------------+-------+
3 rows in set (0.00 sec)
query_response_time_flush 刷新记录值,可通过SET GLOBAL query_response_time_flush='ON';的方式来执行刷新操作,执行此操作将清空QUERY_RESPONSE_TIME,QUERY_RESPONSE_TIME_READ, QUERY_RESPONSE_TIME_WRITE 3张表中收集的数次,并且会重新读取query_response_time_range_base的值应用到新的记录中。