我们偶尔会看到 show global status like "Queries"
但是在启用了所有功能的慢速查询日志中看不到它们,所以我们看不到这些查询是什么。
如果我想查看慢速查询日志中的所有内容,以下是(我认为是)相关的全局变量:
log_queries_not_using_indexes ON
log_slow_admin_statements ON
log_slow_slave_statements ON
log_throttle_queries_not_using_indexes 0
long_query_time 0.000000
min_examined_row_limit 0
slow_launch_time 2
slow_query_log ON
slow_query_log_file /tmp/slow.log
在5分钟内,mysql全局状态变量 Questions
报告90433个查询,但慢日志中只有56479个查询。丢失的33954个(38%)查询在哪里?
我用一个 enableLog.pl
设置上述变量5分钟,然后将其还原为原始值的脚本:
# mysql --login-path=cm -Ee 'show global status like "Queries"' && rm -rf /tmp/slow.log && ./enableLog.pl --duration 5m /tmp/slow.log && mysql --login-path=cm -Ee 'show global status like "Queries"'
***************************1. row***************************
Variable_name: Queries
Value: 73570440
11:41:51: logging for 00:05:00 until 11:46:51
... ending
***************************1. row***************************
Variable_name: Queries
Value: 73660873
# perl -E 'say 73660873-73570440'
90433
# grep '^# Time: ' /tmp/slow.log | wc -l
56479
# perl -E 'say 90433-56479'
33954
# perl -E 'say +(90433-56479)/90433'
0.375460285515243
在enablelog.pl运行时,以下是(相关)全局变量:
# mysql --login-path=cm -e 'show global variables;' | egrep '^(slow_|log_|min_)'
log_bin OFF
log_bin_basename
log_bin_index
log_bin_trust_function_creators OFF
log_bin_use_v1_row_events OFF
log_builtin_as_identified_by_password OFF
log_error /var/log/mysql/error.log
log_error_verbosity 3
log_output FILE
log_queries_not_using_indexes ON
log_slave_updates OFF
log_slow_admin_statements ON
log_slow_slave_statements ON
log_syslog OFF
log_syslog_facility daemon
log_syslog_include_pid ON
log_syslog_tag
log_throttle_queries_not_using_indexes 0
log_timestamps UTC
log_warnings 2
long_query_time 0.000000
min_examined_row_limit 0
slow_launch_time 2
slow_query_log ON
slow_query_log_file /tmp/slow.log
# mysql --version
mysql Ver 14.14 Distrib 5.7.9, for Linux (x86_64) using EditLine wrapper
此外,它们不是查询缓存命中:
# mysql --login-path=cm -e 'SHOW GLOBAL STATUS LIKE "Qcache_hits";'
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Qcache_hits | 0 |
+---------------+-------+
3条答案
按热度按时间epfja78i1#
请注意,对全局变量的更改不会被现有会话继承。
会话在会话启动时复制全局变量,并且会话在会话的生存期内不会重新复制全局变量。因此,如果会话的寿命相对较长,有些人就不会“听说”他们应该记录他们缓慢的查询。确保所有会话都遵循新的全局设置的唯一方法是使它们重新连接并启动新会话。
其他一些答案建议启用常规查询日志,但是如果会话是长期的,并且不知道全局配置选项的更改,那么这将没有帮助。这些会话也不会启用常规查询日志。
percona服务器实现了一个配置选项slow\u query\u log\u use\u global\u control,使会话对某些查询日志选项使用global选项。但是mysql没有这个功能。
我实现了一个类似于enablelog.pl的脚本。在这里:
代码:https://github.com/billkarwin/bk-tools/blob/master/full-slow-log
手册:https://github.com/billkarwin/bk-tools/blob/master/doc/full-slow-log.rst
kyvafyod2#
当您想知道时,请同时打开慢速查询日志(如上所述)和同一脚本中的常规日志。并排比较将非常容易看到常规日志正在做什么,而慢速查询日志中缺少什么。
记住,在会话结束时关闭常规日志,以避免填满存储设备。
jmp7cifd3#
根据手册:
服务器不会将查询缓存处理的查询写入慢速查询日志,也不会将由于表中没有行或只有一行而无法从索引中获益的查询写入慢速查询日志。
检查查询缓存使用
寻找qcache\u点击率。也可以检查全局值。
请在此处阅读有关查询缓存的详细信息