MySQL slow log 慢日志

MySQL慢日志用于记录执行时间超过设定阈值的SQL,有助于系统监控和性能优化。慢日志可通过slow_query_log参数开启,记录位置可设置为文件或mysql.slow_log表。SQL是否记入慢日志受long_query_time、min_examined_row_limit等参数影响。慢日志样例包括slow_log表结构和慢日志文件内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

慢日志用于记录执行时间超过指定阈值的SQL,对于系统监控和调优非常有意义。

1.开启慢日志
slow_query_log=0|1,0为关闭,1为开启;
slow_query_log_file=file_name,指定慢日志文件名,默认名字为host_name-slow.log,如果不是绝对路径,那么默认存放在datadir目录下;
log_output=table|file|none,table表示慢日志信息存放在mysql.slow_log数据表里;file表示慢日志信息存放在磁盘文件上,由上述slow_query_log_file指定;如果是none,即使开启了慢日志功能,也不会记录任何慢SQL;如果不指定为file,即使设置了slow_query_log_file也是无效的。
例如:

--开启slow log
set @@global.slow_query_log=1;
--设置slow log文件名,默认放在数据目录下
set @@global.slow_query_log_file=slow_log;
--设置将慢日志同时记录到数据表和磁盘文件中
set @@global.log_output='TABLE,FILE';

2.什么SQL会记录到慢日志里
一个SQL的快慢并没有绝对的评判标准,在OLAP里,有10秒SQL也不算慢,但在OLTP里,在某些业务场景里,也许1秒的SQL已经算是严重的性能问题。
所以在MySQL里,慢日志记录的慢SQL,评判标准可以自定义,由以下几个参数来决定。
1.long_query_time
该参数定义一个SQL的执行时间阈值,单位为秒,默认是10,最小值为0,可以指定0.1表示100ms。
2.min_examined_row_limit
该参数定义一个SQL所读取的数据行数;
3.log_queries_not_using_indexes
该参数决定是否记录未使用索引的SQL;
4.log_slow_admin_statements
该参数决定是否记录管理类的命令,有 ALTER TABLE,ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE,REPAIR TABLE,默认是不记录这一类语句到慢日志。
5.log_throttle_queries_not_using_indexes
该参数决定每分钟记录未使用索引的SQL的数量上限,因为未使用索引的SQL可能会非常多,导致慢日志空间增长飞快。
6.log_slow_slave_statements
该参数在从库上设置,决定是否记录在复制过程中超过long_query_time的SQL,如果binlog格式是row,则即使开启了该参数,也不会记录相关SQL。

那么一个SQL被记录到慢日志里,需要满足以下条件:
1.管理类语句不会记录,除非开启了log_slow_admin_statements;
2.执行时间需要超过long_query_time,或者对于未使用索引的SQL,需要开启log_queries_not_using_indexes,并且记录数量在log_throttle_queries_not_using_indexes之下;
3.SQL需要读取数据行数超过min_examined_row_limit;
4.从库的复制语句默认不记录,除非binlog格式是statement且开启log_slow_slave_statements。

3.慢日志的存放位置
慢日志可以存放磁盘文件,也可以存放在mysql.slow_log,表结构如下:

+----------------+---------------------+------+-----+----------------------+--------------------------------+
| Field          | Type                | Null | Key | Default              | Extra                          |
+----------------+---------------------+------+-----+----------------------+--------------------------------+
| start_time     | timestamp(6)        | NO   |     | CURRENT_TIMESTAMP(6) | on update CURRENT_TIMESTAMP(6) |
| user_host      | mediumtext          | NO   |     | NULL                 |                                |
| query_time     | time(6)             | NO   |     | NULL                 |                                |
| lock_time      | time(6)             | NO   |     | NULL                 |                                |
| rows_sent      | int(11)             | NO   |     | NULL                 |                                |
| rows_examined  | int(11)             | NO   |     | NULL                 |                                |
| db             | varchar(512)        | NO   |     | NULL                 |                                |
| last_insert_id | int(11)             | NO   |     | NULL                 |                                |
| insert_id      | int(11)             | NO   |     | NULL                 |                                |
| server_id      | int(10) unsigned    | NO   |     | NULL                 |                                |
| sql_text       | mediumblob          | NO   |     | NULL                 |                                |
| thread_id      | bigint(21) unsigned | NO   |     | NULL                 |                                |
+----------------+---------------------+------+-----+----------------------+--------------------------------+

存放位置通过log_output控制,取值可以为table|file|none,默认是file,可以同时设置table和file选项,log_output=table,file

4.慢日志信息样例
1.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 |
+----------------------------+---------------------------+-----------------+-----------------+-----------+---------------+-----+----------------+-----------+-----------+---------------------------+-----------+
| 2019-05-07 11:51:46.270304 | root[root] @ localhost [] | 00:00:00.366980 | 00:00:00.015808 |         1 |        280777 | sam |              0 |         0 |       128 | select count(*) from test |         4 |
+----------------------------+---------------------------+-----------------+-----------------+-----------+---------------+-----+----------------+-----------+-----------+---------------------------+-----------+

2.慢日志文件

[root@master data]# mysqldumpslow master-slow.log 

Reading mysql slow query log from master-slow.log
Count: 1  Time=0.35s (0s)  Lock=0.02s (0s)  Rows=1.0 (1), root[root]@localhost
  select count(*) from test
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值