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


12

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

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

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

回答:


19

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.