MySQL 提供了几个不同的日志文件,可以帮助你了解 MySQL 服务器实例内部的情况。这些日志文件包括:
- 错误日志
- isam 日志
- 常规查询日志
- 二进制日志
- 慢速日志
其中,慢速查询日志对于查找低效或耗时的查询特别有用,这些查询会对数据库和整体服务器性能产生不利影响。本篇文章将介绍如何读取和解释慢查询日志输出以更好地调试查询性能。
开启慢速查询日志
慢速查询日志由执行时间超过 long_query_time 秒的 SQL 语句组成,并且至少需要检查 min_examined_row_limit 行。因此,出现在慢查询日志中的查询是那些需要大量时间来执行的查询,是需要优化的查询。
慢速查询日志默认是禁用的,以节省磁盘空间。你可以通过将 --slow_query_log 变量设置为 1(在Navicat 中为 ON)来打开它。同样,不提供任何参数也会打开慢速查询日志。同样,参数 0(在 Navicat 中为 OFF)会禁用日志。
在 Navicat 中,你可以使用服务器监控工具访问系统变量。它可以通过“工具”主菜单命令访问。在服务器监控中,点击中间的变量选项卡并向下滚动以查看列表中的 slow_query_log 和 slow_query_log_file 服务器变量:
读取慢速查询日志
由于需要筛选大量内容,检查长的慢速查询日志可能是一项耗时的任务。慢速日志文件中的典型条目如下所示:
# Time: 140905 6:33:11 # User@Host: dbuser[dbname] @ hostname [1.2.3.4] # Query_time: 0.116250 Lock_time: 0.000035 Rows_sent: 0 Rows_examined: 20878 use dbname; SET timestamp=1409898791; ...SLOW QUERY HERE...
为了更容易读取日志内容,你可以使用 mysqldumpslow 命令行实用程序来处理慢速查询日志文件并总结其内容:
~ $ mysqldumpslow -a /var/lib/mysql/slowquery.log Reading mysql slow query log from /var/lib/mysql/slowquery.log Count: 2 Time=316.67s (633s) Lock=0.00s (0s) Rows_sent=0.5 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost ...SLOW QUERY HERE...
Navicat 查询分析器
Navicat Monitor 的查询分析器工具提供查询日志的图形表示,使解释其内容更加容易。此外,查询分析器工具使你能够监视和优化查询性能、可视化查询活动统计信息、分析 SQL 语句以及快速识别和解决长时间运行的查询。
除了慢速查询日志之外,查询分析器还使用以下方法收集有关查询语句的信息:
- 从服务器检索常规查询日志并分析信息。
- 查询 performance_schema 数据库并分析特定的性能信息。
你将在“最新的死锁查询”和“进程列表”部分下方找到“查询分析器”部分:
总结
本文介绍了几种读取慢速查询日志输出的方法,以更好地调试查询的性能。