2

SQLServer2000には悲観的な同時実行モデルがあることを私は知っています。また、楽観的なモデルがSQL Server 2005に追加されました。では、SQL Server 2005および2008で悲観的な同時実行モデルを使用しているか、楽観的なモデルを使用しているかをどのように判断すればよいでしょうか。

ありがとう。

4

3 に答える 3

2

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
于 2012-05-19T16:33:29.433 に答える
0

マイクロソフトからのいくつかの記事やドキュメントを読んだ後。私は次の結論を得ました。

SQLServer2005以降の場合

  • コミットされていない読み取り繰り返し可能な読み取り、またはシリアル化可能な分離レベルを使用している場合は、悲観的な同時実行モデルを使用しています。
  • スナップショット分離レベルを使用している場合は、楽観的同時実行モデルを使用しています。
  • 読み取りコミット分離レベルを使用していて、データベース設定read_committed_snapshotONの場合、楽観的同時実行モデルを使用しています
  • 読み取りコミット分離レベルを使用していて、データベース設定read_committed_snapshotOFFの場合、悲観的同時実行モデルを使用しています

ただし、まだ確認が必要です。また、並行性モデルをテストするためのコードがある場合は、それは素晴らしいことです。

于 2012-05-19T14:28:41.333 に答える
0

基本的に:

悲観的:レコードを使い終えるまで、自分だけのためにレコードをロックします。したがって、コミットされたトランザクション分離レベルを読み取ります。(あなたが言ったようにコミットされていない)

楽観的同時実行制御は、複数のユーザー間でリソースが競合する可能性が低いという前提で機能し、リソースをロックせずにトランザクションを実行できるようにします。リソースは、トランザクションがデータを変更しようとしているときにのみチェックされます。これにより、競合が発生したかどうかが判別されます(たとえば、バージョン番号を確認することにより)。競合が発生した場合、アプリケーションはデータを読み取って変更を再試行する必要があります。楽観的同時実行制御は製品には付属していませんが、データベースアクセスを追跡することにより、手動でアプリケーションに組み込むことができます。(出典

于 2012-05-19T14:53:59.707 に答える