問題タブ [optimistic-concurrency]
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.
.net - Linq to Sql オブジェクトで Update を実行する際に問題が発生する
私は単純な linq to sql オブジェクトを持っています。データベースから取得し、フィールドを変更して保存します。
更新された行はありません。:(
ネットワーク経由で送信された完全な Sql コードを確認すると、主キーを介してではなく、where 句を介してすべてのフィールドで行が更新されていることがわかります。これは正常ですか?各フィールドの where'ing (それは :P という単語です) の代わりに、主キーにリンクする where 句を使用してフィールドを更新するのは簡単だと思いました。
これがコードです...
ここにいくつかのサンプルSQLがあります..
今、私はこの更新に日時フィールドがあることを知っています..そして私がDBをチェックしたとき、その値は「2009-09-25 12:32:12.720」でした/です(上記よりゼロが少ない)..だから私はそうではありませんそれがwhere句の条件を台無しにしているかどうかを確認してください...
それでも!PK の where 句を実行する必要があります..どちらかといえば..スピードのために!
はい・いいえ ?
アップデート
nitzmahon の返信を読んだ後、いくつかの値で楽観的な同時実行性をいじってみましたが、それでもうまくいきませんでした :(
それで、私はいくつかの新しいことを始めました...オプティミスティック同時実行が発生すると、更新しようとしているフィールドにwhere句が含まれます。そうなると、うまくいきません。
だから..上記のSQLでは、where句は次のようになります...
これは正しく聞こえません。更新を行う前に、DB の値は null です。しかし、ListId の値を where 句に追加すると (または、L2S がオプトミスティックな同時実行性のためにそれを追加した場合)、行の検索/一致に失敗します。
なんだ?
nhibernate - NHibernateがStaleObjectStateExceptionをスローしない場合データベースで使用され、データが変更されました
バージョン番号としてSQLタイムスタンプ列を使用する楽観的同時実行制御を使用してNHibernateにマップされたエンティティがあります。マッピングは次のようになります。
私は、データベース内の行のデータがレコードの取得と更新の間で変更されたときに何が起こるかをテストしています。そのために、NHibernateによって更新されているテーブル内のレコードの1つに対して直接updateステートメントを実行しています。この直接更新により、テーブル内のレコードのバージョン番号が変更されます。
予想どおり、NHibernateが管理する更新は特定の行では発生しません(これは適切です)。ただし、コミット中に例外はスローされません。トランザクションをロールバックしてユーザーに通知できるように、トランザクションがコミットされたときにStaleObjectStateExceptionが発生することを期待していました。これは予想される動作ではありませんか?私は何かが足りないのですか?
トランザクションをコミットするための私のコードは次のようになります。
アイテムは同じセッションに属し、すべての作業は1つのトランザクション内で完了します。ChildEntityは、オプティミスティックロックがバージョンに設定されているエンティティ基本クラスのサブクラスです。
java - Hibernate-クエリでStaleObjectStateExceptionが発生する可能性はありますか?
StaleObjectStateException
最初のクエリと2番目のクエリの間の異なるセッション内での同時更新によってそのクエリの結果データが変更された場合、1つのtx内で同じクエリを2回実行すると、Hibernateでを取得できますか?
このシナリオでは、すべてのエンティティで楽観的同時実行制御を使用しています。
こんな感じです。
スレッド1:トランザクションが開始
されますスレッド1:クエリが実行されて取得されます。つまり、key = 4711の順序
スレッド2:キー4711の同じ順序が取得され、変更され、2番目のスレッドでコミットされます
スレッド1:クエリが再度実行され、戻る必要がありますkey=4711で注文する
StaleObjectStateException
2番目のクエリでThread-1を取得しますか?
ご協力いただきありがとうございます!
トーマス
insert - linq-to-entities を使用した挿入
こんにちは、このエラーを解決できません。問題に関するヘルプは大歓迎です、ありがとう!
エラーメッセージ:
Store update、insert、または delete ステートメントが予期しない数の行 (0) に影響を与えました。エンティティが読み込まれてから、エンティティが変更または削除された可能性があります。ObjectStateManager エントリを更新します。
ラップトップ/デスクトップを追加しようとすると、常に上記のエラー メッセージが表示されます。
ローカルで実行している場合はすべて正常に動作しますが、dev では動作しません。Web サイトとサービス/データベースは、2 つの異なる開発ボックスにあります。
スタック トレースは次のとおりです。
現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。
スタックトレース:
また、ラップトップ/デスクトップを追加しようとすると、コンピューターの行が挿入されても、ラップトップ/デスクトップの行が挿入されないことがあります。
c# - NHibernate (c#) の例での同時実行違反
かなり長い間、 NHibernateの楽観的並行性について読んでいました。私が理解したことが正しければ、以下のサンプルはうまくいくはずです。
2 つのトランザクション T1 と T2 を考えてみましょう。
- T1 と T2 が同時に行われると、状態 (DB エントリ) は最新の更新の値で更新されます。(T1 または T2)。
概念的には正しいようですが、理解と統合テストのためにこれをシミュレートするにはどうすればよいですか?
サンプルの C# コードを教えてもらえますか?
ありがとう 、
ビジェイ
gridview - ObjectDataSource と GridView によるオプティミスティック コンカレンシーの問題
ASP .NET 2.0 アプリケーションで問題が発生しています。
ObjectDataSource (TabledAdapter (オプティミスティック コンカレンシーを使用する型指定されたデータセット) に接続する BLL クラスに接続) からのデータを表示する GridView があります。
選択 (データの表示) は正常に機能しますが、行を更新すると、GridView は古い値を ObjectDataSource に渡します。
そして、これはページの一部です:
大きな失敗か何かが関係しているような気がしますが、何時間もじっと見つめていて、それを見つけることができません。
.net-4.0 - この Entity Framework コードでこのオプティミスティック コンカレンシー エラーを処理するにはどうすればよいですか?
EF4を使用するいくつかのリポジトリ パターンプロジェクトに、次の疑似コードがあります。
非常に単純ですが、実行時エラーが発生します:-
ConcurrencyException: Store、Update、Insert、または Delete ステートメントが予期しない数の行 (0) に影響を与えました。
今、これが起こっていることです:-
- EF4 の 2 つのインスタンスがアプリで同時に実行されています。
- インスタンス A が delete を呼び出します。
- インスタンス B は、1 ナノ秒後に削除を呼び出します。
- インスタンス A がエンティティをロードします。
- インスタンス B もエンティティをロードします。
- インスタンス A はそのエンティティを削除します - クールなバナナ。
- インスタンス B はエンティティを削除しようとしますが、エンティティは既に削除されています。そのため、ノーカウントまたはそうでないものは0であり、1..またはそのようなものを期待していました。基本的に、削除するはずのアイテムが削除されていないことがわかりました (ほんの数秒前に発生したため)。
これが競合状態か何かのようなものかどうかはわかりません。
とにかく、2番目の呼び出しがクラッシュしないように、ここでできるトリックはありますか? 私はそれをストアドプロシージャにすることができました..しかし、今はそれを避けたいと思っています。
何か案は?選択が呼び出されたときにその行(およびその行のみ)をロックできるかどうか疑問に思っています...行ロックが解除されるまでインスタンスBを強制的に待機させます。その時までに、行は削除されるため、インスタンス B が選択を行うと、データは存在しません..削除されることはありません。
java - onetoany コレクション ホルダーのバージョン管理が失敗する
指定された親エンティティ
と子1
1 つのトランザクションで親と子の両方を更新しているときに、org.hibernate.StaleObjectStateException がスローされます: 別のトランザクションによって行が更新または削除されました (または、保存されていない値のマッピングが正しくありませんでした):
実際、hibernate は 2 つの SQL 更新を発行します。1 つは親プロパティを変更し、もう 1 つは子プロパティを変更します。親の更新が子を変更するのを取り除く方法を知っていますか? この更新により、楽観的ロックの非効率性と誤検知が発生します。子と親の両方が状態を DB に正しく保存することに注意してください。
Hibernate のバージョンは 3.5.1-Final です
sql-server - Sql Serverで読み取り/書き込み比率を計算する方法は?
Sql Server 2005 で読み取り/書き込み比率を照会するにはどうすればよいですか? 知っておくべき注意事項はありますか?
おそらく、DMV クエリ、標準レポート、カスタム レポート (パフォーマンス ダッシュボードなど)、または Sql Profiler トレースの調査で見つけることができます。正確にはわかりません。
なぜ私は気にするのですか?
Web アプリのデータ層のパフォーマンスを改善するために時間を費やしています。何百万ものレコードと何千ものユーザーを扱っています。
私が検討しているポイントの 1 つは、データベースの同時実行性です。Sql Server は、既定でペシミスティック コンカレンシーを使用します。これは、書き込みの多いアプリに適しています。私のアプリが読み取り負荷が高い場合は、Jeff Atwood が StackOverflow で行ったread committed snapshot
ように、オプティミスティック コンカレンシー (分離レベル: )に切り替える可能性があります。