我在 Mariadb 10.6 上运行一个 WordPress 网站,最近我在 Mysqltuner 中看到一个错误“Joins performed without indexes”。
尽管这个数字不是很大,但 Mysqltuner 建议您继续增加 Key_buffer_size。
但是,我的 VPS 没有很多可用内存,所以我用另一个问题来解决这个错误。
由于我有大约几十个活跃的插件,我想检查哪个插件导致了这个问题。
因此,首先,我启用了错误日志,如下所示。
log-queries-not-using-indexes = 1
log_error = /var/log/mysql/mysql-error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 3
并在一段时间后运行 pt-query-digest 来分析错误日志。
pt-query-digest /var/log/mysql/mysql-slow.log
但我想不出任何其他问题。
在慢日志中的众多查询中,如何确定哪一个查询试图与没有索引的列进行连接?
我不了解数据库,所以仅通过查看查询无法弄清楚。
答案1
要查找不使用索引执行的连接,
从 MySQL 命令提示符中确定当前值,以便在慢查询日志中仅记录 JPWI 1 小时后恢复正常
SELECT @@long_query_time;
SELECT @@min_examined_row_limit;
write down the above values
SET GLOBAL long_query_time=3600; for a ONE MINUTE slow log trigger
SET GLOBAL min_examined_row_limit=1; if the query reads one row, consider logging
SET GLOBAL log_queries_not_using_indexes=1; to get the log you are needing
一个小时内,
SET GLOBAL long_query_time=discovered above;
SET GLOBAL min_examined_row_limit=discovered above;
SET GLOBAL log_queries_not_using_indexes=0; # to turn OFF feature
FLUSH LOGS;
去检查最近一小时的慢查询日志中涉及的没有索引的查询。
查看个人资料以获取联系信息,如果您需要更多建议,请与我们联系。
大多数人不会记录慢查询和没有索引的查询,以避免分离意大利面条。选择其中一个,只是为了保持某种形式的理智。
(固定格式,编辑需要6个字符)