web-dev-qa-db-ja.com

mysqlのスロークエリログ内の「ロック時間」をどのように解釈すればよいですか?

MySQLのスロークエリログに表示されるクエリのロック時間を最適に解釈する方法を理解しようとしています。

たとえば、UPDATEクエリのロック時間が10秒の場合です。更新クエリがロックを取得してからの合計時間だと思います。以前の選択クエリが完了するのを待っているが、UPDATEアクション自体を実行していない場合でも、UPDATEクエリの後に並んだすべてのSELECTクエリをロックしているため、時計が動いているはずです。

また、SELECTクエリのロックについてはどうでしょう。一部の選択クエリにロック時間があるのはなぜですか? UPDATEクエリがフォローアップしているため、テーブルをロックしています。

12
Haluk

lock_timeスロークエリログの実際の時間は、クエリの実行に必要なロックを取得するためにクエリが待機していた時間です。たとえば、UPDATESクエリには書き込みロックが必要です。

ロックは、テーブルで使用しているストレージエンジンによっても異なります。書き込み時には、InnoDBは行レベルのロックを使用し、変更されている行のみをロックします。 MyISAMは、更新/挿入/削除が完了するまでテーブル全体をロックします。

MyISAMのテーブル全体のロックは、スロークエリログにSELECTクエリのlock_timeが含まれる大きな理由です。

19
Derek Downey