Open4

トランザクション分離性について調べる

yuuki008yuuki008

Anomaly 調査

応用情報の試験に出てくる Anomaly はこの 3 つっぽい

見た記事

https://speakerdeck.com/mpyw/postgres-niokerutoranzakusiyonfen-li-reberu?slide=32

yuuki008yuuki008

RDBMS でサポートされている分離レベル

  • Read Uncommited
  • Read Commited
  • Repeatble Read
  • Serializable
yuuki008yuuki008

分離性とパフォーマンスのトレードオフ

全ての Anomaly を防ぐのは、分離レベルを Serialize にすればいい。
しかし常に実行できるトランザクションが 1 つとなり、トランザクションを実行するまでの待ち時間が長くなってしまうためパフォーマンスが落ちる。

MVCC で解決?

各トランザクションが開始時にデータのスナップショットを用意して、自分のスナップショットに対してデータの読み書きを行うこと。
スナップショットを取得して後から整合性を確かめるなら楽観的ロックになるのかな?
という楽観的ロックってなんだったっけ?

yuuki008yuuki008

排他制御

https://qiita.com/NagaokaKenichi/items/73040df85b7bd4e9ecfc

同じデータに対しての同時アクセスによる不整合を防ぐために、直列に処理するように制御すること

楽観的ロック

めったなことで同時更新は起きないということを前提とした排他制御。
更新対象のデータがデータ取得時と同じ状態であることを確認してから更新する。

デメリット

データ更新で利用される画面入力に時間がかかる業務の場合は最初からやり直しになってしまう。

悲観的ロック

同時更新が頻繁に発生することを前提とした排他制御
更新対象のデータを取得する際にロックを変えることで、他のトランザクションから更新されないようにする。

デメリット

ロックの解放漏れが発生した場合、いつまで経っても他のトランザクションでデータにアクセスできなくなる。