Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PKでのDELETE後INSERTでDEAD LOCKする問題事象のご説明

PKでのDELETE後INSERTでDEAD LOCKする問題事象のご説明

REPEATABLE READで、PKでのDELETE後INSERTでDEAD LOCKする 問題事象について

Avatar for Kentoku SHIBA

Kentoku SHIBA

October 17, 2018
Tweet

More Decks by Kentoku SHIBA

Other Decks in Technology

Transcript

  1. 接続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になる
  2. - 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)抜粋