問題タブ [contention]
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.
java - アプリケーション レベルで行ロック競合を処理する方法
同じOracleデータベース(11g)を使用する2つのアプリケーション(Spring - Hibernate with Boot)があります。どちらのアプリも一貫して特定のテーブルにヒットし、このテーブルには膨大な数のヒットがあります。DB ログで行ロックの競合例外を確認できます。これらを取得するたびに、またはデッドロックのような状況が発生するたびに、アプリケーションを再起動する必要があります。
これらのアプリケーションには JPA エンティティ マネージャーを使用しています。この問題について助けが必要です
c# - ディクショナリにアクセスする際のロック競合を改善するための提案
これは私の最初の投稿なので、ガイドラインを見逃している場合はご容赦ください。
その場でキーを調整するためのソリューションを実装しています。これは、すべてのリクエストの前にロックする必要がある辞書を中心に展開しています (複数のスレッドが同じキーを同時に要求して変更できるため)。予想どおり、ディクショナリ内のアイテムの数は重要ではありませんが、使用されているスレッドの数によってロックの競合が増加します。
ディクショナリをロックできない場合は、呼び出し元を遅らせないように、OK を返します。ロックが成功するたびに約 5us、失敗すると約 600us かかります。そのため、ロックの競合によって、スロットルされた可能性のあるキーの処理が許可されるだけでなく、多くの時間がかかります。ロック メカニズムは Monitor.TryEnter を使用しています。
テスト パラメータ: ディクショナリ内の 20,000 項目、均等加重
10 スレッドで 140k tps、ロック競合 6% 20 スレッドで 90k tps、10% ロック競合 30 スレッドで 80k tps、14% ロック競合
これらは途方もなく高い TPS 値であり、単一のボックスでは決してヒットしない可能性がありますが、TPS が低くても、アクセスするスレッドの数が多い場合は問題が残ります。
この状況を改善する最善の方法は何でしょうか? おそらく、複数の辞書に対して個別のロックを備えたシャーディング メカニズムを使用し、使用する辞書を見つけるために個別のルックアップを行うことができますか?
ありがとう :)
c# - C# で foreach を使用してデータ エンティティを繰り返し更新すると競合エラーが発生する
このエンティティがサーバーの要求によって毎秒何度も更新される場合、エンティティの更新を最適化するにはどうすればよいですか? 更新に使用される方法は、次のように開発されています。
これはエラーです:
InvalidOperationException: エラーが発生しました, Grpc.Core.RpcException: Status(StatusCode=Aborted, Detail="too much contention on these datastore entities. Please try again. entity groups: [(app=p~******** 、*********、"76fcb9c1-009e-****-b54f-68a45e9c****")]")