欢迎回到 MySQL 日志系列。稍后在讨论 Navicat Monitor for MySQL / MariaDB 的监控时,我们将参考前三篇文章。 第一部分第一部分简介了 MySQL 中不同的日志类型,重点介绍了其中最重要的,并涵盖了前两个。第二部分更详细地介绍了二进制日志。而慢日志将成为今天的主题。
慢速查询日志包含执行时间超过一定时间并且需要查询检查给定数量的行的 SQL 语句。这是十分重要的,因为它大大地简化了查找低效或耗时查询的任务,正如你所知,这些查询会对数据库和整体服务器性能产生负面影响。
慢速查询日志参数
你可能想知道究竟是什么构成了“慢”和/或“低效”的查询。显然,这没有 “一刀切”的答案,但是 MySQL 的制造商 Oracle 将其置于 10 秒,这恰好是 long_query_time 阈值变量的最大值。而最小值 0 会导致记录所有查询。如果你想要更精细的值,也可以将该值指定为微秒的分辨率。
默认情况下,慢速查询日志不会记录管理语句以及不使用索引进行查找的查询。话虽如此,你可以使用 log_slow_admin_statements 和 log_queries_not_using_indexes 变量更改此行为。
如果没有为慢速查询日志文件指定名,则将其命名为 host_name-slow.log。除非给出绝对路径名来指定不同的目录,否则服务器会在数据目录中创建文件。你可以使用 slow_query_log_file 指定日志文件的名。
慢速查询日志格式
以下是典型慢速查询条目:
root@server# tail /var/log/slowqueries# Time: 130320 7:30:26
# User@Host: db_user[db_database] @ localhost []
# Query_time: 4.545309 Lock_time: 0.000069 Rows_sent: 219 Rows_examined: 254
SET timestamp=1363779026;
SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes';
如果使用 --log-short-format 选项,服务器将向慢速查询日志写入较少的信息。相反,如果启用 log_slow_extra 系统变量(从 MySQL 8.0.14 开始提供),服务器会在日志写入几个额外字段。
启用慢速查询日志
慢查询日志是禁用的。若要启用它,你必须将 --slow_query_log 变量设置为1(在 Navicat 中设置为 ON)。同样,不提供参数也会启用慢速查询日志。参数 0(在 Navicat 中设置为 OFF)会禁用日志。
在 Navicat 中,你可以使用“服务器监控”工具查找系统变量。通过“工具”主菜单命令访问它。
在“服务器监控”中,点击中间的“变量”选项卡,然后向下滚动到列表中的 slow_query_log 和 slow_query_log_file 服务器変量:
在 Navicat 的服务器监控工具中的 slow_query_log 服务器变量