1、MySQL慢查询的配置属性
A.查看慢查询的开启状态及慢查询的日志存储目录
show variables like '%slow_query%';

慢查询日志的存储未指定文件名会默认生成”主机名-slow.log”的文件。
B.查询慢查询的日志记录时间
show variables like 'long_query_time';
2、慢查询日志的开启
A.通过全局命令开启
mysql> set global slow_query_log='ON';mysql> set global slow_query_log_file='/usr/local/mysql/data/slow.log';mysql> set global long_query_time=1;
B.通过配置文件配置并重启MySQL服务
①.修改配置my.cnf或者my.ini文件并保存
在配置文件的[mysqld]下面添加一行内容 slow_query_log=1 即可开启慢查询,其他配置内容如下
[mysqld]slow_query_log = ONslow_query_log_file = /usr/local/mysql/data/slow.loglong_query_time = 1
②.重启MySQL服务
Microsoft Windows [版本 10.0.18363.900](c) 2019 Microsoft Corporation。保留所有权利。C:\WINDOWS\system32>net stop mysqlMySQL 服务正在停止.MySQL 服务已成功停止。C:\WINDOWS\system32>net start mysqlMySQL 服务正在启动 ..MySQL 服务已经启动成功。
③.打开MySQL客户端通过 show variables like '%slow_query%'; 查询慢查询开启状态
3、测试慢查询的日志记录
mysql> select sleep(2);+----------+| sleep(2) |+----------+| 0 |+----------+1 row in set (2.01 sec)mysql> select sleep(11);+-----------+| sleep(11) |+-----------+| 0 |+-----------+1 row in set (11.00 sec)mysql>
4、记录慢查询日志到数据库表
A.在配置文件添加如下命令行
mysql库下面有一个默认的slow_log表,可以直接将slow_query_log_file = slow_log,即可将慢查询日志记录到表中。
##配置慢查询slow_query_log=1log_output = table
B.重启MySQL服务
Microsoft Windows [版本 10.0.18363.900](c) 2019 Microsoft Corporation。保留所有权利。C:\WINDOWS\system32>net stop mysqlMySQL 服务正在停止..MySQL 服务已成功停止。C:\WINDOWS\system32>net start mysqlMySQL 服务正在启动 ..MySQL 服务已经启动成功。C:\WINDOWS\system32>
C.通过命令查看慢查询日志输出到表是否成功
mysql> show variables like '%log_output%';+---------------+-------+| Variable_name | Value |+---------------+-------+| log_output | TABLE |+---------------+-------+1 row in set, 1 warning (0.01 sec)mysql>
D.在MySQL表中查看慢查询的日志记录
mysql> select * from mysql.slow_log;+----------------------------+------------------------------+-----------------+-----------------+-----------+---------------+----+----------------+-----------+-----------+------------------+-----------+| start_time | user_host | query_time | lock_time | rows_sent | rows_examined | db | last_insert_id | insert_id | server_id | sql_text | thread_id |+----------------------------+------------------------------+-----------------+-----------------+-----------+---------------+----+----------------+-----------+-----------+------------------+-----------+| 2020-07-10 23:43:40.290020 | root[root] @ localhost [::1] | 00:00:11.000904 | 00:00:00.000000 | 1 | 0 | | 0 | 0 | 1 | select sleep(11) | 8 || 2020-07-10 23:44:10.887578 | root[root] @ localhost [::1] | 00:00:11.000009 | 00:00:00.000000 | 1 | 0 | | 0 | 0 | 1 | select sleep(11) | 8 |+----------------------------+------------------------------+-----------------+-----------------+-----------+---------------+----+----------------+-----------+-----------+------------------+-----------+2 rows in set (0.00 sec)mysql>

如果查询出的sql_text列中为二进制文本需要通过convert函数进行转换
select convert(sql_text using utf8) sql_text from mysql.slow_log;
再查看慢查询日志记录文件中未持续更新保存,所有新记录全在MySQL表中
5、MySQL慢查询记录到日志文件和表中的区别
- 慢查询记录到日志文件和表中,记录本身差别不大,如果是记录在表中,慢查询的执行时间信息无法精确到微妙,
- 如果将慢查询信息记录在表中,方便查询,但因为是结构化的数据,可能会比记录在慢查询日志文件中(平面文本文件)要慢一点,如果是记录到文件,需要mysqldumpslow工具解析。
- 慢查询不记录执行失败的查询,比如long_query_time设置为10(10秒钟),一个查询超过了10秒钟,但是因为其他原因执行失败,MySQL的慢查询将无法记录此查询信息。


