タグ付けされた質問 「snapshot-isolation」

1
1つのトランザクションで同じレコードが複数回更新された場合、いくつのバージョンが保存されますか?
Kimberly L. TrippによるMSDNの記事によると、Neal Gravesの「SQL Server 2005行バージョン管理ベースのトランザクション分離」 "... 特定のレコードの以前のバージョンはすべて、リンクリストにチェーンされています。また、長時間実行される行のバージョン管理ベースのトランザクションの場合、トランザクション的に一貫したバージョンにアクセスするには、アクセスごとにリンクをたどる必要があります。行」 これは、「行バージョニングを使用してコミットされた読み取りでの行バージョニング」と「スナップショット分離での行バージョニング」の両方のセクションに共通する「行バージョニングについて」セクションにあります。 さらに、変更による行のバージョン管理の例では、SNAPSHOTのみの複数のトランザクション(T1、T2、T3)による同じレコードの複数の更新のコンテキストで説明されています。 1つのトランザクションのみがレコードを複数回(複数のステートメントによって)更新する場合、複数のバージョンストアが保存(リンク)されますか、それともスナップショット「イメージ」の時点で取得されたもののみが取得されますか? まあ、この質問への答えはすぐに私のその他の保留中の関連する質問に答えるはずです: 行バージョン管理分離では、レコードのバージョンのリンクリストを使用するのはなぜですか? RCSIはSNAPSHOTより少ないか同じスペースを使用しますか?どうして?

1
トランザクション分離レベルのスナップショットと切り捨て?
スナップショット分離とTRUNCATEに関して、私が予期していなかったこの動作に誰かが光を当てることができることを願っています。 データベース:スナップショット分離を許可= True; コミットされた読み取りスナップショットがオン= False。 手順1(長時間実行される複雑なSELECTのテーブルfooのコンテンツを多数の結合で置き換えます): BEGIN TRAN; TRUNCATE TABLE foo; INSERT INTO foo SELECT...; COMMIT; 手順2(テーブルfooからの読み取り): SET TRANSACTION ISOLATION LEVEL SNAPSHOT; SELECT * FROM foo; Procedure2の実行中にProcedure1が実行されている場合、Procedure2は、Procedure1が終了するまで(sp_WhoIsActiveに応じて)LCK_M_SCH_S待機で待機します。そして、Procedure2が完了すると、次の例外が発生します。 このトランザクションの開始以降、ステートメントによってアクセスされたオブジェクトが別の同時トランザクションのDDLステートメントによって変更されたため、データベース 'DatabaseName'でスナップショット分離トランザクションが失敗しました。メタデータはバージョン管理されていないため、許可されません。メタデータへの同時更新は、スナップショット分離と混在している場合、不整合を引き起こす可能性があります。 ただし、Microsoftでは、スナップショット分離では許可されていないDDLステートメントとしてTRUNCATEをリストしていません。http://msdn.microsoft.com/en-us/library/bb933783.aspx 手順2がTRUNCATEの前にテーブルから最も最近コミットされたデータをすぐに返すか、または手順1によって保持されてから、テーブル。手伝ってくれますか?

1
コミットされた読み取りスナップショット分離(RCSI)で取得された共有ロック
LCK_M_SRCSIを使用すると、共有ロックの待機()が発生します。私の理解では、SELECTsRCSIを使用するときに共有ロックを必要としないため、これは発生しないはずです。 共有ロックを確認するにはどうすればよいですか?外部キーが原因ですか?

3
「接続が閉じてプールに戻されると、最後のSET TRANSACTION ISOLATION LEVELステートメントからの分離レベルが保持されます」?
MSDNオンライン記事「SQL Serverのスナップショット分離」には、次のように記載されています。 「分離レベルには接続全体のスコープがあり、SET TRANSACTION ISOLATION LEVELステートメントを使用して接続に設定されると、接続が閉じられるか、別の分離レベルが設定されるまで有効です。接続が閉じられ、プールに戻されるとき、最後のSET TRANSACTION ISOLATION LEVELステートメントからの分離レベルが保持されます。プールされた接続を再利用する後続の接続では、接続がプールされたときに有効だった分離レベルが使用されます。 自己矛盾する段落ではありませんか(「まで」と「保持」)。 次に、接続を閉じてプールに戻した後、「最後のSET TRANSACTION ISOLATION LEVELステートメントからの分離レベルが保持されている」場合、それをどのように理解する必要がありますか。 デフォルトの分離レベルは任意の値になります(プール内の異なる接続には異なる分離レベルがあり、その値は再オープンされる接続に依存します)? または、プール内のすべての接続のすべてのデフォルト値が最後の値に変更されますか?しかし、手に入る前にまた全く未知ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.