Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PKでのDELETE後INSERTでDEAD LOCKする問題事象のご説明
Search
Kentoku SHIBA
October 17, 2018
Technology
1
200
PKでのDELETE後INSERTでDEAD LOCKする問題事象のご説明
REPEATABLE READで、PKでのDELETE後INSERTでDEAD LOCKする 問題事象について
Kentoku SHIBA
October 17, 2018
Tweet
Share
More Decks by Kentoku SHIBA
See All by Kentoku SHIBA
New features and enhancements of Spider Storage Engine for sharding
kentoku
0
950
Spiderストレージエンジンのご紹介 2019/05/21
kentoku
2
930
全スレーブが同時にレプリケーションを停止する問題事象
kentoku
0
180
Dead lock by inserting after deleting by primary key
kentoku
0
78
突然全てのスレーブのレプリケーションがunknown error reading log event on the masterというエラーで停止したら。おまけで、Spider Storage Engineを少し。
kentoku
1
23k
An issue of all slaves stop replication
kentoku
0
2.8k
Other Decks in Technology
See All in Technology
[RSJ24] Object Retrieval in Large-Scale Indoor Environments Using Dense Text with a Multi-Modal Large Language Model
keio_smilab
PRO
1
240
Zero Data Loss Autonomous Recovery Service サービス概要
oracle4engineer
PRO
0
3.2k
#Zenoh 完全に理解した 〜組込み純情篇〜
takasehideki
1
470
技術ブログや登壇資料を秒で作るコツ伝授します
minorun365
PRO
23
5.3k
なぜクラウドサービスで Web コンソールを提供するのか
shuta13
4
2k
PDF Viewer作成の今までとこれから
hunachi
0
170
Evolving DevOps Teams and Flexible Organizational Culture
kakehashi
1
210
LLMに日本語テキストを学習させる意義
ksaito
13
3.7k
四国のあのイベントの〇〇システムを45日間で構築した話 / cloudohenro2024_tachibana
biatunky
0
290
【Λ(らむだ)最近のアプデ情報 / RPALT20240904
lambda
0
180
OR学会2024秋_短期収益と将来のオフ方策評価性能を考慮したクーポン割当方策混合比の決定
recruitengineers
PRO
4
360
React Aria で実現する次世代のアクセシビリティ
ryo_manba
4
1k
Featured
See All Featured
Facilitating Awesome Meetings
lara
49
5.9k
The Language of Interfaces
destraynor
153
23k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
225
22k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
663
120k
Creatively Recalculating Your Daily Design Routine
revolveconf
215
12k
A better future with KSS
kneath
235
17k
A Modern Web Designer's Workflow
chriscoyier
690
190k
What's new in Ruby 2.0
geeforr
340
31k
Build your cross-platform service in a week with App Engine
jlugia
228
18k
10 Git Anti Patterns You Should be Aware of
lemiorhan
653
58k
Unsuck your backbone
ammeep
667
57k
Transcript
PKでのDELETE後INSERTでDEAD LOCKする 問題事象のご説明 Kentoku SHIBA
- トランザクション隔離レベルREPEATABLE READ - 同じレコードをPKを指定して、同時にDELETEすると、一方は成 功し、もう一方はロック待ちとなる。 - DELETEに成功した方の接続で、削除したPKのレコードを INSERTするとDEAD LOCKになる。
問題事象
接続1 接続2 start transaction 接続2は、pk=1のレコードロック取得時にLOCK待ちになる。 接続1は、INSERT INTENTION GAP LOCKのチェックで、接続2のGAP LOCKにより待たされるためDEAD
LOCKとなる。 問題事象 start transaction delete from t1 where pk = 1; delete from t1 where pk = 1; LOCK待ちになる insert into t1 (pk) values (1); DEAD LOCKになる
- INSERT INTENTION GAP LOCK INSERTレコードのネクストキーに対して、GAP LOCK(INSERT INTENTION GAP LOCKを除く)もしくは、NOT
GAPではないレ コードLOCKがある場合、LOCK WAITとなる。 このチェックを通過後、 INSERT INTENTION GAP LOCKは即 時解除される。 - 暗黙レコードLOCK このレコードに対してLOCKのチェックが行われる際に、NOT GAPのレコードLOCKとして実体化する。 INSERT時はINSERT INTENTION GAP LOCKでLOCK競合を 確認し、INSERT後は暗黙レコードLOCKによって競合を確認する。 INSERT時のLOCK(REPEATABLE READ)抜粋
INSERT時のLOCKの挙動を踏まえると、 以下のケースのいずれかに該当すれば、 INSERT INTENTION GAP LOCKのチェックを省略できる。 - INSERTするレコードに既に排他レコードLOCKを取得している。 (DELETE、UPDATEが行われた場合など) INSERT
INTENTION GAP LOCKの省略の検討
- READ COMMITTEDが利用可能であるかを検討し、 READ COMMITTEDで、DELETE→INSERTを行う。 - 同一レコードに対する処理が同時に行われないように、追加の排 他制御を行う。 - リトライが可能であるかを検討し、リトライ処理を行う。
現時点での対応策