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 参数的具体含义

如果我们将语句的执行时间定义为如下:

实际消耗
经验分享 程序员 微信小程序 职场和发展