2020年11月27日金曜日

sql server のロックについて

私は都内でITエンジニアをしています。

先日、開発環境では発生しない不具合が、検証環境でのみ発生するという事が起きました。

そんな事があるのかと思いました。

違いはDBにあると思いました。

環境によって接続先のDBが違っていてそれしか理由が見つからなかったためです。


不具合の内容は以下になります。

>CSVを読み込んでDB登録する機能で検証環境のみロックが発生する。


Javaでトランザクションを張っていて、その中であるテーブルに複数回アクセスしていました。

2回めのアクセスで待ち状態となってデッドロックが発生しているよう見えます。


検証環境と開発環境のテーブル定義を調べました。

検証環境のテーブルにはインデックスが張ってありませんでした。

これが原因で検証環境ではロックが発生してたのです。

おそらく内部的な処理に原因があると思うのですがインデックスがロックの挙動に影響があるなんて思いつきませんでした。