問題タブ [isolation-level]

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 に答える
62 参照

sql-server - 分離質問での集計列の更新

私は取引テーブルと取引テーブルを持っています。取引テーブルには集計された列「TotalSales」があります。これは単に取引ごとの取引数です。

次のコマンドを使用すると、トランザクションの行数と合計販売数が同期しない可能性はありますか (行の削除を除く)? デフォルトの分離レベルはこれで機能しますか? 多くのユーザーが同時に購入する可能性があるため、これを処理する最善の方法を見つけようとしています.

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

c# - コードからの SQL クライアント トランザクションとデータベース制御のトランザクション

私は常にストアド プロシージャ内からトランザクションを実行してきましたが、コードから実行される一連の "動的" ステートメントをsp_executesqlトランザクションでラップする必要があります。

具体的には、READ UNCOMMITED場合によってはこれらの分離レベルが必要です (それが何をするかはわかっています。はい、それが必要です)。これは SQL2008 です。

私の質問は次のとおりです。BeginTransaction()分離レベルを に設定して SqlConnection インスタンスのメソッドを使用すると、次のステートメントIsolationLevel.ReadUncommittedを持つストアド プロシージャを実行した場合と同じ効果がありますか?READ UNCOMMITED

0 投票する
8 に答える
1793 参照

oracle - Oracleトランザクション分離

既存のレコードを非アクティブ化し、新しいレコードを挿入するSaveApp()メソッドがあります。

データベーステーブルSalesAppに、appIDが123のレコードが2つあるとします。

  1. レコード1、appID 123、非アクティブ
  2. レコード2、appID 123、アクティブ

このメソッドSaveApp()を2つのスレッドで同時に呼び出すと、最初のトランザクション(T1と呼びます)は既存の2つのレコードを更新し、2番目のトランザクション( T2と呼びます)は待機します。

T1が終了すると、このテーブルには3つのレコードが作成されます。ただし、どういうわけかT2は新しく挿入されたレコードを認識せず、T2の更新クエリは前の2つのレコードのみを更新し、4番目のレコードを挿入します。

これらの2つのメソッド呼び出しの後、データベースに4つのレコードがあり、3番目と4番目のレコードが両方ともアクティブになっていますが、これは間違っています。

  1. レコード1、appID 123、非アクティブ
  2. レコード2、appID 123、非アクティブ
  3. レコード3、appID 123、アクティブ
  4. レコード4、appID 123、アクティブ

この問題を解決できる解決策を知っていますか?動作しないシリアル化可能な分離レベルを使用してみました。

ありがとう!

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

python - SQLAlchemy for PostgreSQL でトランザクション分離レベルを設定するにはどうすればよいですか?

SQLAlchemy 宣言型ベースを使用しており、トランザクション レベルを分離したいメソッドがあります。説明すると、データベースに同時に書き込みを行う 2 つのプロセスがあり、それらのロジックをトランザクションで実行する必要があります。デフォルトのトランザクション分離レベルは READ COMMITTED ですが、SERIALIZABLE 分離レベルを使用してコードを実行できる必要があります。

これは SQLAlchemy を使用してどのように行われますか? 現在、基本的にモデルには、SQLAlchemy の宣言ベースから継承するメソッドがあり、基本的にトランザクションで呼び出す必要があります。

トランザクション分離レベルを使用してこれを呼び出すためにこれを行っていますが、期待どおりの動作をしていません。分離レベルは、postgres ログに表示される内容からまだ READ COMMITTED です。誰かが私が間違っていることを特定するのを助けることができますか?

SQLAlchemy 0.5.5 を使用しています

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

mysql - トランザクション分離レベルの良い説明

トランザクション分離レベルが多くの例とアドバイスで説明されている良い本を誰かが知っていますか?どのような場合にどの分離レベルを使用するか?

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

c# - TransactionScope に複数の分離レベルが必要ですか?

デッドロックの問題を解決するために、アプリケーションでテーブル ロック ヒントを使用するか、トランザクション分離レベルをデフォルトの Read Committed 以外に設定する必要がある状況に遭遇しています。私はサービス指向アーキテクチャを使用しており、各サービス呼び出しはアトミック操作として動作し、Linq To Sql は軽量 DAL として機能しています。各サービス呼び出しは、私のビジネス レイヤーを呼び出し、次のような新しいトランザクションを宣言します。

問題は、多くのデータベース操作を必要とする複雑なビジネス ロジックがある場合があることです。一部の読み取り、一部の書き込み、更新のための一部の読み取りなどは、すべて同じサービス呼び出し内で行われるため、同じトランザクションになります。

Linq To Sql がテーブル ロック ヒントを linq クエリに追加できないことについて読んだことがありますが、代わりに TransactionScope 分離レベルを使用するという解決策が提案されています。それは素晴らしいことですが、私の状況では、各トランザクションがアトミックなサービス呼び出しを目的としている場合、これがどこで機能するかわかりません。たとえば、ロックせずに 1 つのテーブルを読み取る必要があり、ダーティ リードは問題ない可能性がある場合、方向転換して更新のために別の読み取りを行い、更新を行います。トランザクション全体に Read Uncommitted を設定するのではなく、特定の読み取りのみを設定したいのですが、どうすればよいですか?

ビューやストアド プロシージャを使用せずに、または datacontext.ExecuteQuery("my raw sql string here") を使用せずに、テーブル ロック ヒントを追加できるようにする、実装できる拡張機能はありませんか

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

oracle - 任意のOracleセッションが使用しているトランザクション分離レベルを確認するにはどうすればよいですか?

特定のセッション (自分のセッションではない) が Oracle サーバーでどのような分離レベルを持っているかを調べようとしています。これを取得するための av$.. ビューはありますか?

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

sql - SELECT ステートメント - SET TRANSACTION ISOLATION LEVEL READ COMMITTED を指定した NOLOCK

私の理解では、NOLOCK が SELECT ステートメントで使用されている場合、コミットされていない/ダーティな行も読み取られる可能性があります。しかし、テーブルの NOLOCK ヒントを利用して、SELECT クエリを高速に実行したいと考えていました。

さて、テーブルの NOLOCK は "SET TRANSACTION ISOLATION LEVEL READ COMMITTED" とともに、NOLOCK の利点と、コミットされた行のみ (SET のため) を使用した高速な SELECT クエリ (NOLOCK のため) を提供しますか?

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

jta - Berkeley DB Java Edition for Distributed Transactions(XA)でのトランザクション分離レベルの設定

BDB JEアプリケーションで分散トランザクションを使用して、複数のBDBJE環境間でトランザクションを調整しています。トランザクション分離レベルをシリアル化可能に設定したい。分散トランザクションを開始するには、生成したXidを使用し、BDB JEのネイティブトランザクションクラスを避けて、グローバルに一意であることを確認する必要があります。開始するトランザクションブランチはThreadLocalであるため、操作のトランザクションフィールドにnullが渡されます。では、分離レベルを設定するにはどうすればよいですか?分離レベルはすでにデフォルトでシリアル化可能になっていますか?私のグーグルフーは何も上げていません...

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

sql-server - SQL Server でのロック動作について

質問[1]の状況を再現してみました。


SQL Server 2008 R2 SSMS で、wiki の「Isolation (database systems)」[2] からデータを取得して入力したテーブルで、次のコマンドを実行しました。

1) SSMS の最初のタブ (ウィンドウ) の最初

2) 直後、2 番目のウィンドウで


更新:
申し訳ありませんが、結果が修正されました。

私の結果は、2) で設定された分離レベルに応じて、SELECT が返すことです。

  • すぐに (コミットされていない挿入された行を読み取る)

    • NOLOCK を使用した SELECT のすべての場合
    • READ UNCOMMITTED の場合 (NOLOCK の有無にかかわらず SELECT)
  • トランザクションの完了を待っている 1) ( SELECT が NOLOCK なしの場合のみ) および

    • READ COMMITTED 以上 (REPEATABLE READ、SERIALIZABLE) のトランザクション分離レベル

これらの結果は、質問で説明されている状況 (および回答で説明されていますか?) [1]
(たとえば、NOCHECK を指定した SELECT が 1 の完了を待っている) などと 矛盾しています。

私の結果と [1] はどのように説明できますか?


Update2:
この質問は、実際には私の質問 [3] (または回答されていない結果) のサブ質問です。

引用:
[1] SQL Server でのロック動作について説明する
SQL Server でのロック動作について説明する [2] 「分離 (データベース システム)」 末尾に ) を追加してリンクしてください。ここのリンクでそれを保存することはできません! http://en.wikipedia.org/wiki/Isolation_(database_systems) [3] SQL Server 2005 の SELECT ステートメントのデフォルトは NOLOCK ですか? NOLOCK は SQL Server 2005 の SELECT ステートメントの既定ですか?