SQLServer2000には悲観的な同時実行モデルがあることを私は知っています。また、楽観的なモデルがSQL Server 2005に追加されました。では、SQL Server 2005および2008で悲観的な同時実行モデルを使用しているか、楽観的なモデルを使用しているかをどのように判断すればよいでしょうか。
ありがとう。
SQLServer2000には悲観的な同時実行モデルがあることを私は知っています。また、楽観的なモデルがSQL Server 2005に追加されました。では、SQL Server 2005および2008で悲観的な同時実行モデルを使用しているか、楽観的なモデルを使用しているかをどのように判断すればよいでしょうか。
ありがとう。
SQL 2005(および2008)では、SNAPSHOT分離が導入されています。これは、楽観的並行性に移行する方法です。トランザクション分離と新しいスナップショット分離レベルの記事をご覧ください。
Isolation level Dirty Reads Non-repeatable Phantom reads Concurrency
reads control
READ UNCOMMITTED Yes Yes Yes Pessimistic
READ COMMITTED No Yes Yes Pessimistic
(with locking)
READ COMMITTED No Yes Yes Optimistic
(with snapshot)
REPEATABLE READ No No Yes Pessimistic
SNAPSHOT No No No Optimistic
SERIALIZABLE No No No Pessimistic
マイクロソフトからのいくつかの記事やドキュメントを読んだ後。私は次の結論を得ました。
SQLServer2005以降の場合
ただし、まだ確認が必要です。また、並行性モデルをテストするためのコードがある場合は、それは素晴らしいことです。
基本的に:
悲観的:レコードを使い終えるまで、自分だけのためにレコードをロックします。したがって、コミットされたトランザクション分離レベルを読み取ります。(あなたが言ったようにコミットされていない)
楽観的同時実行制御は、複数のユーザー間でリソースが競合する可能性が低いという前提で機能し、リソースをロックせずにトランザクションを実行できるようにします。リソースは、トランザクションがデータを変更しようとしているときにのみチェックされます。これにより、競合が発生したかどうかが判別されます(たとえば、バージョン番号を確認することにより)。競合が発生した場合、アプリケーションはデータを読み取って変更を再試行する必要があります。楽観的同時実行制御は製品には付属していませんが、データベースアクセスを追跡することにより、手動でアプリケーションに組み込むことができます。(出典)