問題タブ [snapshot-isolation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
200 参照

sql-server - Snapshot Isolation と RCSI が有効になっている SQL Server データベースで行を排他的にロック (ブロック リーダー) することはできますか?

Snapshot Isolation と RCSI が有効になっている SQL Server データベースで行を排他的にロック (ブロック リーダー) することはできますか?

基本的に、テーブルで xlock、rowlock select を実行したいと考えています。

0 投票する
1 に答える
1527 参照

sql - データベース トランザクション: 「書き込みスキュー」と「失われた更新」の違い

データベーストランザクション理論における「書き込みスキュー」と「失われた更新」の違いを正確に説明してもらえますか? 誰かが私に例を教えてもらえますか?

0 投票する
2 に答える
1338 参照

sql-server - SQL Server ブックマーク ルックアップ デッドロック ソリューション

アプリケーションでブックマーク ルックアップのデッドロックが検出されました。使用する解決策を決定できません。それらのどれも最適ではないようです。

クエリは次のとおりです。

問題は、クラスター化インデックスと逆の順序で両方のクエリで使用される CATEGORY と DATA に非クラスター化インデックスがあることです。

つまり、更新はクラスター化インデックスをロックしてテーブルを更新しますが、選択はクラスター化されていないインデックスをロックしてブックマークの検索を行い、両方がお互いにロックすることを望んでいます (デッドロック)。

私が見つけたオプションは次のとおりです。

1 - 選択クエリのすべての列を含むインデックスを作成します。- うまくいきましたが、良い考えだとは思いません。アプリケーションのどこでも更新できる選択クエリで使用される列を含める必要があります。

2 - データベースのトランザクション分離レベルを COMMITTED_SNAPSHOT に変更します

3 - 選択に NOLOCK ヒントを追加します

4 - インデックスを削除する

5 - 他のトランザクションをブロックすることになるロックを取得する機会が得られる前に、トランザクションの 1 つを早い時点で強制的にブロックします。(動作しませんでした)

2 番目のオプションが最良の選択だと思いますが、他の問題が発生する可能性があることはわかっています。COMMITTED_SNAPSHOT を SQL SERVER の既定の分離レベルにするべきではありませんか?

アプリケーションにもデータベース ロジックにもエラーはないように思えます。これは、非クラスター化インデックスを持つ 1 つの単純なテーブルと、同じテーブルにアクセスする 2 つのクエリ (1 つは更新用、もう 1 つは選択用) です。

この問題を解決する最良の方法はどれですか? 他の解決策はありますか?

SQL Server が単独で解決できることを本当に期待していました。

0 投票する
1 に答える
162 参照

c# - 複数の同時クエリで IsolationLevel.Snapshot を使用したトランザクション クエリがある場合、SELECT @@IDENTITY は何を返しますか?

複数のトランザクションを持つ複数のアプリケーションによるテーブルアクセスがあり、これらの複数のアプリケーション/トランザクションが、そのトランザクションを実行するアプリケーションによって挿入された各プライマリキー/IDを取得するようにします。何らかの理由でSCOPE_IDENTITYを使用できないため、最後の並べ替えは@@IDENTITYを使用することです。トランザクション クエリでは、ブロックを回避するためにトランザクションごとにIsolationLevel.Snapshotを実装しました。

ここで私の質問は、各トランザクションが@@IDENTITYを正しく、それに応じてこのシナリオで返すかどうかです。

元。3 つのクエリを同時に実行します。

  • Transactional1 Query Insert は、予期されるリターン ID 100 を返します。
  • Transactional2 Query Insert で返される ID が 102 と予想されます。
  • Transactional3 Query Insert で返される ID が 103 と予想されます。

このようにそれに応じてアイデンティティを返しますか?これが私の目標です

  • 取引1 - 100
  • トランザクション 2 - 102
  • トランザクション3 - 103

それとも、このようなことが起こる可能性がありますか?これは私が起こることを恐れています

  • 取引1 - 102
  • トランザクション 2 - 103
  • 取引3 - 101

この既存のトリガーが、コードとクエリに SCOPE_IDENTITY があるにもかかわらず、SCOPE_IDENTITY が ID を返す理由です。

0 投票する
1 に答える
1370 参照

c# - ASP.Net MVC 5 と SQL トランザクションの分離レベル

データベースのフロント エンドの作成に問題があります。データベースからの EF6 Code First から始めました。コントローラーを作成し、作成ページでテストを実行しましたが、大きな問題が発生しました。次のエラーが表示されました。

他に表示されたのは、コントローラーからのコードです。

await db.SaveChangesAsync(); が強調表示されました。エラー行として。そのため、MVC コードのトランザクション レベルを変更するためにどこを見ればよいのか混乱しています。Web.config、データベース用に作成されたモデル、またはコントローラーのいずれでしょうか? 変更するには TransactionScope を使用する必要があることはわかっています。
デフォルトのトランザクション スコープをデータベースの設定対象に変更する方が簡単です。その変更をどこで行うべきかわかりませんか?

0 投票する
1 に答える
198 参照

sql-server - snapshop 分離を使用するように webapi アプリの IIS Web 構成を構成する

システムのパフォーマンス (デッドロック、db 書き込みの進行中に db 読み取りがロックされるなど) のため、snapshop 分離を試してみたいと思います。ここで、スナップショット分離レベルについて読みました。Entity Frameworkを使用しています

データベースに Snapshop 分離を設定しており、この分離を読み取りと書き込みの両方に使用するように Web API アプリを構成したいと考えています。これどうやってするの?これは web.config で実行できることを読みましたが、方法が見つかりません..

0 投票する
1 に答える
1688 参照

.net - スナップショット分離トランザクションは更新の競合により中止されましたが、トランザクションは開始されません

UPDATE ステートメントの実行中にエラーが発生しました。

エラー:

更新の競合により、スナップショット分離トランザクションが中止されました。スナップショット分離を使用してデータベース 'myDatabase' のテーブル 'dbo.Companies' に直接または間接的にアクセスし、別のトランザクションによって変更または削除された行を更新、削除、または挿入することはできません。トランザクションを再試行するか、更新/削除ステートメントの分離レベルを変更してください。

声明:

ASP.NET アプリケーションを介して上記のステートメントを実行しました。

興味深いのは、ステートメントがトランザクションなしで実行されることです。コードは次のようになります。

私はグーグルで検索しましたが、SNAPSHOT分離レベルトランザクションを使用するとエラーが発生することがわかりました。しかし、取引はありません。

このスレッドで説明されているように、INDEXING は状況によっては役立ちますが、これは役に立ちません。

このエラーについて何か考えはありますか? どんな助けでも大歓迎です。

ありがとう、