私は 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;
インデックスのないクエリについては、過去 1 時間のスロー クエリ ログを確認してください。
連絡先情報についてはプロフィールをご覧ください。追加のアドバイスが必要な場合はご連絡ください。
ほとんどの人は、スパゲッティが分離するのを避けるために、遅いクエリやインデックスのないクエリを記録しません。 何らかの形で健全性を保つために、どちらか一方を取得します。
(フォーマットは固定、編集には 6 文字必要)
答え2
MyISAMテーブルはありますか?ない場合は(そしてテーブルはすべきInnoDBの場合)より低い key_buffer_size
30Mまで。
「インデックスなしの結合」は必ずしも問題ではありません。遅いクエリの方が重要です。スローログつまり、最も遅い、それが「インデックスなしの結合」であるかどうかに関係なく、pt-query-digest
またはmysqldumpslow -s t
WordPress のパフォーマンスを向上させるには、このプラグインを追加します。 WP インデックスの改善