Mysql

如何查找沒有索引執行的連接?

  • May 7, 2022

我在 Mariadb 10.6 上執行了一個 WordPress 網站,最近我在 Mysqltuner 中看到一個錯誤 Joins executed without indexing。

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

但我想不出任何其他問題。

在慢日誌中的眾多查詢中,您如何確定哪一個正在嘗試與沒有索引的列連接?

我不知道數據庫,所以我無法僅通過查看查詢來弄清楚。

要查找僅在沒有索引的情況下執行的連接,

從 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

在一小時內,設置 GLOBAL long_query_time=在上面發現;SET GLOBAL min_examined_row_limit=上面發現的;設置全域 log_queries_not_using_indexes=0; # 關閉功能

FLUSH LOGS;

去查看你最後一小時的慢查詢日誌,了解沒有索引的查詢。

查看個人資料以獲取聯繫資訊,請與我們聯繫,如果您需要其他建議,請。

大多數人不會記錄慢查詢和沒有索引的查詢,以避免分離意大利麵條。得到一個或另一個,只是為了保持某種形式的理智。

引用自:https://serverfault.com/questions/1099477