😽

MySQLの排他ロックとindexの関係性、lock wait timeout を添えて

2023/02/24に公開

書くこと

  • MySQLの行ロック/テーブルロックのdefault lock wait timeout
  • MySQLの排他ロックとindexの関係性

利用技術

  • MySQL 5.7

MySQLのdefault lock wait timeout

ロック種別 default lock wait timeout column
行ロック 50s innodb_lock_wait_timeout
テーブルロック 31,536,000s(1year) lock_wait_timeout
/*
行ロックのタイムアウト確認
*/
show variables like 'innodb_lock_wait_timeout';

/*
テーブルロックのタイムアウト確認
*/
show variables like 'lock_wait_timeout';

MySQLの排他ロックとindexの関係性

  • 排他ロック(書き込み権限)をどこまでそのトランザクションが奪うかという話
  • DBのindexの話が重要
データ取得条件 ロック範囲 example 補足
uniq index 行ロック(4) id = 4
uniq indexs 範囲ロック(4~6) id = [4, 5, 6]
uniq indexs 範囲ロック(4~8) id = [4, 7] 少し広めに取ることをGAPと呼ぶ。(物理削除すると少し複雑)
not uniq index 範囲ロック(3~5) not_uniq_id = 4
not uniq indexs 範囲ロック(3~7) not_uniq_id = [4, 5, 6]
not index テーブルロック(全て) not_index = 4 ダメ。絶対。

参考文献

Discussion