MySQL 慢查询记录原理和内容解析
背景
本文并不准备说明如何开启记录慢查询,只是将一些重要的部分进行解析。
如何记录慢查询可以自行参考官方文档:
-
5.4.5 The Slow Query Log
本文使用 Percona 版本来开启参数 log_slow_verbosity,得到了更详细的慢查询信息。通常情况下信息没有这么多,但是一定是包含关系,本文也会使用 Percona 的参数解释说明一下这个参数的含义。
一、慢查询中的时间
实际上慢查询中的时间就是时钟时间,是通过操作系统的命令获得的时间,如下是 Linux 中获取时间的方式:
while (gettimeofday(&t, NULL) != 0) {} newtime= (ulonglong)t.tv_sec * 1000000 + t.tv_usec; return newtime;
实际上就是通过 OS 的 API gettimeofday 函数获得的时间。
二、慢查询记录的依据
1. long_query_time:如果执行时间超过本参数设置记录慢查询。
2. log_queries_not_using_indexes:如果语句未使用索引记录慢查询。
3. log_slow_admin_statements:是否记录管理语句。(如 ALTER TABLE,ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE, and REPAIR TABLE.)
本文主要讨论 long_query_time 参数的含义。
三、long_query_time 参数的具体含义
如果我们将语句的执行时间定义为如下:
实际消耗