ブロッキングチェーンを勉強しています。

公開日: @t_yama5k

仮想通貨とか分散型台帳技術の方が検索で引っかかるけど
それとはちょっと違う話。

What is "ブロッキングチェーン"?

SQLServer でちょいちょい起こるロック待ちの連鎖のこと。
SQLServer の ロック思想上、ロック待ちは必ず発生するのでそれ自体は問題ない。 が、長いこと リソースをロックされているといろいろ困る、というかすごい困ってる。

すべてはロック思想の違いによる

このあたりの挙動は同じく商用 DB である Oracle と比べると理解しやすい。

以下、いろいろ参考記事

READ COMMITTED	・・・	COMMIT 済みのデータだけを読み取る
SQL Server および Oracle のデフォルト設定

トランザクション分離レベルが"Read Commited"の場合 例えば、あるテーブルに対してデータ更新中のときにデータ参照を行うと

| SQLServer の場合 | データ更新中?てことはコミットが済んだらそいつが最新データか。よっしゃちょっと待っとくわー | | ---------------- | ------------------------------------------------------------------------------------------------ | | Oracle の場合 | データ更新中?まぁでも既にコミット済みのあるじゃん、もらってくよー |

といった感じの動きになる。

まとめ

snapshot オプションを ON にすると Oracle ぽい挙動になるとか 最近の SQLServer だとインメモリでよろしくできるらしい。
でも、ほいほいオプション変えたりバージョン上げたりは難しいので
更新系のトランザクションを短くするとか
ロックタイムアウト値を設定するなどでがんばるしかない。頑張る。