#author("2022-05-24T02:26:00+00:00","default:admin","admin") #author("2022-05-24T05:15:15+00:00","default:admin","admin") -MySQL関連のWikiへのリンク --[[MySQL:http://wiki.gashimax.com/index.php?MySQL]] --MySQL 5.1 --MySQL 5.4 --MySQL/InnoDB --MySQL/エラー --MySQL/クラスタリング --MySQL/サーバ移動 --MySQL/チューニング --MySQL/バージョン --MySQL/バックアップ --MySQL/プロファイリング --MySQL/ベンチマーク --MySQL/レプリケーション --MySQL/ロック --MySQL/制限 ---- -[[InnoDBで行ロック/テーブルロックになる条件:http://blog.livedoor.jp/sasata299/archives/51345903.html]] -[[MySQLのロックの挙動:http://www.buena-idea.net/~hironobu/mysql/m-2-10.html]] -[[LOCK TABLES と UNLOCK TABLES 構文:http://dev.mysql.com/doc/refman/5.1/ja/lock-tables.html]] -現在ロックされているSQLがあるかどうか見るには [[show processlist;:http://dev.mysql.com/doc/refman/5.1/ja/show-processlist.html]] を実行する。 -ロックではないが、drop database 中は他のDBの更新処理も closing tables 処理(スレッドが変更されたテーブル データをディスクにフラッシュしている、そして使用されたテーブルを閉じている)が激遅になって処理が止まるのに注意! *ロック状態の確認 [#c0ed34a6] -[[MySQL 5.7と8.0でロック状態を確認する(sys.innodb_lock_waitsビュー):https://qiita.com/hmatsu47/items/607d176e885f098262e8]] -[[SHOW PROCESSLISTするときに気を付けること:https://koreshiki-nanno.hatenablog.com/entry/2020/09/21/180330]] SELECT * FROM sys.innodb_lock_waits; *調査 [#tae6ea9f] -まずクエリログをファイルに出力するようにする -show processlist で確認 -ロックがかかっているクエリを確認 SELECT * FROM sys.innodb_lock_waits; -sql_kill_blocking_query で対象になっている番号のクエリを確認 -show processlist では NULL となっていても、クエリログでは確認できる