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する 問題事象について

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)抜粋