問題タブ [read-uncommitted]
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.
nhibernate - NHibernate: データベース内の FK によってのみ関連付けられたコミットされていないデータをリストに入力する
これは、この質問の精緻化と明確化です。
2 つのテーブルがあるFooとしBarます。
Barへの FK がありFooます。
アプリケーションでは、テーブルはクラスによって表されFoo、 のリストがありBarます。
Barの ID のプロパティがありFoo、データベースに FK があります。
SessionとTransactionwithのコンテキストでは、IsolationLevel.ReadUncommittedのインスタンスをデータベースに追加し、生成された ID をのインスタンスのプロパティにFoo割り当て、データベースにも追加します。Foo_idBar
さて、を呼び出す前に、データベースから のリストをTransaction.Commit()NHibernate に読み込ませることは可能ですか? つまり、コミットされていないデータを読み取りますか?FooBar
これを示す VS2012 プロジェクトを作成しました。これには、必要なデータベースを構築するための SSDT プロジェクトが含まれており、私が求めていることを示すテストが含まれています。
ありがとうございました。
db2 - 変更されたがまだコミットされていないデータを読み取る
select .. WITH UR はロックを無視し、現在コミットされているデータのみを提供します
コミットされていないデータを読み取る方法は?
オラクルのように:
テーブル セットを更新します ..
select .. 変更されたがまだコミットされていないデータを与える
sql - READ UNCOMMITTED 分離レベルのクエリによって、アクセスするテーブルがロックされる可能性はありますか?
私のアプリは、テーブルを結合する複雑な SQL クエリの結果である 1,000 万行をバッチ処理する必要があります。
結果セットを反復し、反復ごとに 100 を読み取る予定です。
ビジー状態の OLTP 本番 DB でこれを実行し、ロックを回避するには、 READ UNCOMMITTED 分離レベルでクエリを実行することにしました。
DB書き込みの邪魔にならないようにクエリを取得しますか? 行/テーブルのロックを回避しますか?
私の主な懸念は、クエリが他の DB アクティビティをブロックしていることです。その逆についてはあまり関心がありません。
補足:
1. 履歴データを読み取るため、コミットされていないデータに遭遇する可能性は低いです。私なら大丈夫です。
2. 反復プロセスには数時間かかる場合があります。DB 接続は、このプロセスを通じて開いたままになります。
3. このような同時バッチ インスタンスは最大で 2 つです。
4. 行の重複を許容できます。(コミットされていない読み取りの製品による)。
5. ターゲット DB は DB2 ですが、他の DB ベンダーにも適合するソリューションが必要です。
6. スナップショット分離レベルは、サーバー メモリのクリアに役立ちますか?
c# - nHibernateトランザクションでコミットされていないデータを読み取る方法は?
コミットされていないデータを読み取る方法を知りたいです。エントリを table1 に保存し、同じテーブルからいくつかのエントリを読み取ろうとするアプリケーションがあります。トランザクションの開始とトランザクションの終了の間でデータがロックされるため、それを行うことができません。
私はネットを読んで、isolationlevel=ReadUnCommitted を設定することで、それを処理できるはずだと感じています。しかし、うまくいかないようです。
詳細については、私の以前の投稿を参照してください: StackOverflow の投稿
mysql - 分離レベルが READ_UNCOMMITTED の場合、実行中のトランザクションによって挿入された行が表示されない
テーブルAに行を同時に挿入するアプリケーションがあります。各アプリケーションは、バッチごとに 1 つのトランザクションを使用して (JDBC 準備済みステートメントを使用して) バッチ モードで行を挿入します (それぞれの後にインデックスを再構築するのを避けるためINSERT)。各バッチに存在する行は完全に独立しており、トランザクションは最適化のみに使用されます。挿入された各行には、主キーが自動的に設定されます ( AUTO_INCREMENT)。
ID に基づいてテーブル A の行を処理する別のアプリケーションがあります。アプリケーションは range[ID1,ID2]を処理し、次に range を処理[ID2+1,ID3]し[ID3+1,ID4]ます。各範囲には、たとえば、[ID1,ID2]異なるトランザクション中に挿入された行が含まれる場合があり、これらのトランザクションの一部はまだコミットされていない可能性があります。たとえば、 range[ID1,ID2]では、[ID1,ID1+N]まだコミットされていないトランザクション中に行[ID1+N+1,ID2]が挿入された可能性がありますが、既にコミットされたトランザクション中に行が挿入された可能性があります。したがって、 range 内の行を選択すると、コミットされていない行が表示されるよう[ID1,ID2]にトランザクション分離レベルが に設定されます。READ_UNCOMMITTED
問題は、コミットされていない行が表示されず、処理されない場合があることです。
この問題は、が s のSELECT直後に実行されたときに発生するようINSERTです。ある接続がトランザクションとしてラップされたバッチに複数の行を挿入し、トランザクションをコミットする前に、しばらく待ってから、別の接続READ_UNCOMMITTEDがトランザクション分離レベルとして行をクエリし、行が表示されるテストを行いました。したがって、行が挿入されて自動インクリメント カウンタのロックが解除された場合でも、READ_UNCOMMITTEDトランザクション分離レベルが設定されていても、その行は他のトランザクションから見えない可能性があると結論付けています。
sql - SQL Server 更新ロック
次の SQL がある場合、多くの異なるプロセスによってまったく同時に複数回実行された場合、2 つ以上のプロセスがテーブルを更新する可能性はありますか?
Read Uncommitted を除いて、他のロックなどは SQL で指定されていません。
問題を追跡しようとしていますが、今はストローを握っています...
jpa - @Transactional "READ_UNCOMMITTED" で分離レベルを設定する方法。私はEclipseLink 2.5.1-RC1を使用しています
2番目のトランザクションの例外が古いトランザクションではなく新しいトランザクションのみをロールバックするように、進行中のトランザクション内で新しいトランザクションを開始する必要があります。
これは、次のように2番目のトランザクションで伝播属性を設定することで行っています:
@トランザクション (伝播 = 伝播.REQUIRES_NEW)
これにより新しいトランザクションが作成されましたが、新しいトランザクションは最初のトランザクションのコミットされていないデータを読み取り (ダーティ読み取り)、そのデータも更新する必要があります。これは、分離属性を次のように設定して実行しようとしています。
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation=Isolation.READ_UNCOMMITTED)
これにより、例外 - InvalidIsolationLevelException がスローされ、「標準 JPA はカスタム分離レベルをサポートしていません - JPA 実装には特別な JpaDialect を使用してください」というメッセージが表示されます。
JpaDialect の実装に役立つものはありますか? Eclipse Link 2.5.1 を使用しています。
または、新しいトランザクションを開始する前に、最初のトランザクションをどのように閉じることができますか? 最初のトランザクションは閉じられているため、2 番目のトランザクションは、最初のトランザクションによってコミットされたデータを問題なく読み取ることができます。
tsql - 「コミットされていない読み取り」分離レベルでロックが許可されるのはなぜですか?
トランザクションがコミットまたはロールバックされる前に実行を一時停止するために、コードにブレークポイントを配置しました。次に、データベースの現在の状態を確認したいのですが、ssms でトランザクション分離レベルを設定しread uncommited、一時停止したトランザクションの影響を受けるテーブルに対してクエリを実行すると、ロックされ、トランザクションが完了するまで待機します。
これはなぜですか? また、ロックを無効にすることは可能ですか?