什么是慢日志
慢日志是MySQL用来记录数据库中执行较慢的SQL语句的日志,当数据库遇到性能问题时,慢日志可以帮助我们分析数据库中执行较慢的SQL。
如何打开数据库慢日志功能
MySQL默认是关闭慢日志功能的,可以从数据库中或者从配置文件中进行修改。
在数据库中临时开启:
set global slow_query_log = 'on'; //开启慢查询日志
set global slow_query_log_file = 'path/mysql_xx_slow.log';//设置慢日志路径
set global long_query_time = 2;//设置慢查询阈值,单位秒,超过阈值的SQL会记录到慢日志
配置文件(my.cnf)中永久开启:
slow_query_log = 1
slow_query_log_file = path/mysql_xx_slow.log
long_query_time = 2
log_queries_not_using_indexes = 1 -- 可选项:记录那些没有使用索引的查询
慢日志内容格式
# Time: 2023-10-12T09:14:23.563457Z
# User@Host: user[user] @ localhost []
# Query_time: 12.345678 Lock_time: 0.000123 Rows_sent: 10 Rows_examined: 1000
# Rows_affected: 0 Bytes_sent: 512
SET timestamp=1634038463;
SELECT * FROM large_table WHERE column = 'value';
- Time:查询的执行时间。
- User@Host:发起查询的用户和主机。
- Query_time:查询执行的时间,单位为秒。
- Lock_time:查询执行期间的锁定时间。
- Rows_sent:查询返回的行数。
- Rows_examined:查询过程中检查的行数。
- Rows_affected:影响的行数(如
INSERT
、UPDATE
、DELETE
等)。 - Bytes_sent:返回的数据大小(以字节为单位)。
- SET timestamp:查询执行的时间戳。
- SQL 语句:执行的具体 SQL 查询。
如何快速分析很大的慢日志
使用PerconaToolkit中的pt-query-digest工具可以帮助我们快速分析MySQL的慢查询日志。