デットロックが発生原因について、もうひとつ付け加えたい。
■現象
2つのセッションがあり、1つのテーブルがあるとする。
①あるセッションは、テーブルにINSERTを実行
②あるセッションは、条件指定でSELECTを実行
ここで、デットロックが発生したとする。
①と②は、まったく条件が異なるため、デットロックしないはずでは。。
■原因
テーブルには、INDEXが設定されており、INSERTが
COMMITされるまでは、その
INDEX
を利用したSELECTがロック待ちになる。
(INDEXの木構造を再構築中のためではないか)
■対策
INDEXを参照しないでSELECTする。
利用頻度が低い
INDEX
は、削除した方が、INSERTも早くなる。
INDEXは、パフォーマンスを大幅に改善することがあるが、
デットロックを引き起こす原因になることも忘れてはならない。
0 件のコメント:
コメントを投稿