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
280
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
1.2k
Spiderストレージエンジンのご紹介 2019/05/21
kentoku
2
1.2k
全スレーブが同時にレプリケーションを停止する問題事象
kentoku
0
240
Dead lock by inserting after deleting by primary key
kentoku
0
100
突然全てのスレーブのレプリケーションがunknown error reading log event on the masterというエラーで停止したら。おまけで、Spider Storage Engineを少し。
kentoku
1
26k
An issue of all slaves stop replication
kentoku
0
3.1k
Other Decks in Technology
See All in Technology
pool.ntp.orgに ⾃宅サーバーで 参加してみたら...
tanyorg
0
900
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.6k
CDKで始めるTypeScript開発のススメ
tsukuboshi
1
560
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
1.6k
StrandsとNeptuneを使ってナレッジグラフを構築する
yakumo
1
130
旅先で iPad + Neovim で iOS 開発・執筆した話
zozotech
PRO
0
100
Oracle AI Database移行・アップグレード勉強会 - RAT活用編
oracle4engineer
PRO
0
110
Why Organizations Fail: ノーベル経済学賞「国家はなぜ衰退するのか」から考えるアジャイル組織論
kawaguti
PRO
1
200
Webhook best practices for rock solid and resilient deployments
glaforge
2
310
~Everything as Codeを諦めない~ 後からCDK
mu7889yoon
3
510
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
2
330
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
10k
Featured
See All Featured
Paper Plane
katiecoart
PRO
0
46k
How GitHub (no longer) Works
holman
316
140k
Embracing the Ebb and Flow
colly
88
5k
Bash Introduction
62gerente
615
210k
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
Building the Perfect Custom Keyboard
takai
2
690
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
390
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Building Adaptive Systems
keathley
44
2.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
170
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を行う。 - 同一レコードに対する処理が同時に行われないように、追加の排 他制御を行う。 - リトライが可能であるかを検討し、リトライ処理を行う。
現時点での対応策