如何查找没有索引执行的连接?

如何查找没有索引执行的连接?

我在 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个字符)

答案2

您有 MyISAM 表吗?如果没有(并且您的表应该是 InnoDB)降低 key_buffer_size至 30M。

“无索引连接”不一定是个问题。如果你有慢的查询,这更重要。请参阅SlowLog即努力改进最慢,无论它们是否是“无索引连接”。使用pt-query-digestmysqldumpslow -s t

为了提高 WordPress 性能,请添加此插件: WP 索引改进

相关内容