如何找到沒有索引執行的連線?

如何找到沒有索引執行的連線?

我在 Mariadb 10.6 上運行 WordPress 網站,最近我在 Mysqltuner 中看到在沒有索引的情況下執行連接時出現錯誤。

雖然數字不是很大,但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。

「沒有索引的連結」不一定是問題。如果你有慢的查詢,這個更重要。請參閱慢日誌。也就是說,致力於改善最慢的,無論它們是否是「沒有索引的連接」。使用pt-query-digestmysqldumpslow -s t

為了提高 WordPress 效能,請新增此外掛程式: WP 指數改進

相關內容