😽
MySQLの排他ロックとindexの関係性、lock wait timeout を添えて
書くこと
- 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