📜  如何在mysql中获取慢查询日志(1)

📅  最后修改于: 2023-12-03 14:52:47.360000             🧑  作者: Mango

如何在MySQL中获取慢查询日志

MySQL 慢查询日志是用于将优化器最长耗时查询的详细信息记录的日志文件。它可以帮助开发者了解数据库性能瓶颈并进行优化。本文将介绍如何在 MySQL 中获取慢查询日志。

1. 开启慢查询日志

在 MySQL 中,打开慢查询日志的方法是在 my.cnf(或 my.ini)文件中设置以下参数:

slow_query_log = 1                # 开启慢查询日志
slow_query_log_file = /path/to/slowquery.log     # 慢查询日志文件路径
long_query_time = 2               # 单位:秒,超过该时间的查询会被记录到慢查询日志中
2. 查看慢查询日志

当慢查询日志开启后,系统会将查询时间超过指定值的查询记录到慢查询日志文件中。开发者可以使用以下命令查看慢查询日志:

mysql> SHOW VARIABLES LIKE 'slow_query%';
+---------------------+--------------------------------------+
| Variable_name       | Value                                |
+---------------------+--------------------------------------+
| slow_query_log      | ON                                   |
| slow_query_log_file |/path/to/slowquery.log                 |
+---------------------+--------------------------------------+
2 rows in set (0.00 sec)

在查看日志文件之前,我们需要了解日志文件的格式,其中包含以下信息:

# Thread_id: 865710  Schema: testdb  QC_hit: No
# Query_time: 3.324525  Lock_time: 0.070853  Rows_sent: 135  Rows_examined: 109348
# Rows_affected: 0  Bytes_sent: 31510
use testdb;
SELECT * FROM user LIMIT 0,20;
  • Thread_id:线程 ID
  • Schema:查询所在的库
  • QC_hit:是否命中查询缓存
  • Query_time:查询运行的时间
  • Lock_time:查询所持有的锁的时间
  • Rows_sent:查询返回的行数
  • Rows_examined:查询所使用的行数
  • Rows_affected:查询影响的行数
  • Bytes_sent:查询返回的字节数

使用以下命令查看慢查询日志:

shell> tail -f /path/to/slowquery.log        # 实时查看日志文件
shell> less /path/to/slowquery.log           # 查看完整日志文件(分屏显示)
3. 分析慢查询日志

分析慢查询日志的方法有很多,这里仅列举两种。

方法一:使用 mysqldumpslow

mysqldumpslow 是 MySQL 自带的日志分析工具,可以根据指定规则分析日志文件并输出结果。例如,以下命令可以按照查询时间排序并列出查询次数和最慢查询:

shell> mysqldumpslow -s t /path/to/slowquery.log       # 按照查询时间排序
shell> mysqldumpslow -s c -t 10 /path/to/slowquery.log  # 按照查询次数排序,并列出前 10 条结果
方法二:使用 Percona-Toolkit

Percona Toolkit 是一组 MySQL 监控和管理工具,其中包含 pt-query-digest 工具,可以用于分析 MySQL 日志文件。例如,以下命令可以按照查询时间排序并列出前 10 条查询:

shell> pt-query-digest /path/to/slowquery.log > /path/to/analysis.log     # 将分析结果输出到文件
shell> pt-query-digest /path/to/slowquery.log --limit 10                   # 分析结果显示前 10 条
总结

MySQL 慢查询日志是非常有用的性能分析工具,通过启用慢查询日志并及时查看和分析日志,可以很好地发现数据库性能瓶颈,及时优化查询语句,提高系统性能。本文介绍了在 MySQL 中启用慢查询日志、查看和分析慢查询日志的方法,希望可以帮助开发者更好地使用该工具。