問題タブ [deadlock]
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 - ロックフリーの配列要素スワッピング
マルチスレッド環境では、スレッドセーフな配列要素のスワッピングを行うために、同期ロックを実行します。
上記の状況で次の API を使用して、ロックフリーの配列要素のスワッピングを行うことはできますか? はいの場合、どのように?
hibernate - Hibernate /DB2-913デッドロック
複数のマシンにデプロイされたアプリケーション-同じDBテーブルにアクセスします。MIN行を読み取り、その行を削除します。
これが同時に発生すると、DB2から-913エラーが発生し、デッドロックを示します。
すでに次のオプションを試しました1.行をロックします。2.デッドロックが発生した後、アプリケーションコードでメカニズムを再試行します。
何も機能していないようです。
アイデア/リファレンス/ソリューションはありますか?
TY
mysql - 行を削除するMySQLのデッドロック
約 500,000 行を含む (現在 InnoDB) テーブルがあります。これは、実行するタスクのキューを表します。MySQL データベースに保存されます。
少なくとも 1 秒に 1 回、場合によってはより頻繁に継続的に、そこからデータを選択し、続いていくつかの行を更新します。1 日に 1 回、テーブルから古い行を削除します。
テーブルでデッドロックが発生し始め、これによりタスク処理が停止しました。これらのデッドロックは、夜間の prune 実行中に発生しました。DELETE、SELECT、および UPDATE の組み合わせは、本質的に何も生産的ではないことを意味していました。残念ながら、SHOW ENGINE INNODB STATUS の出力がありません。
これに対処するための最良の選択肢を知りたいです。コードがデッドロックを検出し、クエリを再発行することに注意してください。また、一致するすべての行を一度に削除すると、多くのアクティビティが見られるデータベース テーブルに負担がかかりすぎることをずっと前に発見したため、一度に削除を 10,000 行に制限し、必要なすべての行が削除されるまでクエリを再発行し続けます。剪定した。
次のオプションが表示されます。どれが最適かについての意見や、他のオプションの提案を希望します。
- 一度に削除する行数を減らす
- DELETE で指数バックオフを使用しますが、特定のワークロードを考えるとこれが役に立たないことを懸念しています
- MySQL のドキュメントに従ってテーブルをロックします。おそらく、削除中は SELECT ステートメントと UPDATE ステートメントをブロックすることを受け入れることができます。
- MyISAM テーブル タイプに切り替えます。最初はこのテーブルでトランザクションを使用していたため、InnoDB を使用しました。これはもはや当てはまりません。これが実行可能な解決策であるかどうかを知るには、詳細に精通していません。
- おそらくUPDATE LOW_PRIORITYを使用してください。DELETE は SELECT には影響せず、UPDATE のみに影響する可能性があり、これで十分な場合があります。
sql-server - テスト環境ではなく、本番環境でSQL Server 2005のデッドロックがタイムアウトする:なぜですか?
私の開発環境では、MSSQL 2005 で直面している運用上の問題を再現しようとしています。この問題には 2 つの部分があります。
問題
1) デッドロックが発生し、MSSQL は 1 つの接続 (「接続 X」) を「被害者」として選択します。2) 「接続 X」を使用する後続の試みはすべて失敗します (接続プーリングを使用します)。MSSQL は「サーバーはトランザクションを再開できませんでした」と言う
2 つのうち、より深刻な場合は #2: 「接続 X」は「接続 X」を再利用しようとするすべての「ラウンド ロビン」試行が失敗するため、ミステリアスな「ランダム」エラーがユーザーに表示されます。サーバーを再起動する必要があります。
私が書く理由
ただし、この時点で、問題 1 を再現したいと思います。簡単にデッドロックを作成できます。
しかし、ここに私の問題があります: 本番環境では、MSSQL は 1 つの接続 (SPID) を「デッドロックの犠牲者」として選択しますが、私のテスト環境では、デッドロックがハングするだけです...そしてハングしてハングします。永遠に?よくわかりませんが、一晩ぶら下げたままにしておいて、朝になってもまだぶら下がっていました。
では、ここで質問です。デッドロックが発生したときに、SQL サーバーに「デッドロックの犠牲者を選択」させるにはどうすればよいでしょうか。
これまでの試み
jdbc url (「lockTimeout=5000」) を介して「lock_timeout」パラメーターを設定しようとしましたが、本番環境とは異なるメッセージが表示されました (テストでは、「ロック要求のタイムアウト期間を超えました。」本番環境では「トランザクション (プロセス) ID 59) は、別のプロセスとのロック リソースでデッドロックされ、デッドロックの犠牲者として選択されました。")
問題#2の詳細
この「トランザクションを再開できません」という問題を調査したところ、いくつかのことがわかりました。
- 不適切な例外処理がこの問題を引き起こす可能性があります。例: Java コードは Statement/PreparedStatement を閉じず、ドライバーの「接続」の実装は、不良/古い/古い「トランザクション ID」でスタックしています。
- jdbc ドライバーをアップグレードすると、問題が解決する場合があります。
ただし、今のところ、デッドロックを再作成し、SQL サーバーに「デッドロックの犠牲者を選択」させたいだけです。
前もって感謝します!
付録 A. 技術環境
発達:
- SQL サーバー 2005 SP3 (9.00.4035.00)
- ドライバー: sqljdbc.jar バージョン 1.0
- JBoss 3.2.6
- jdbc URL: jdbc:sqlserver://<>;
製造:
- SQL サーバー 2005 SP2 (9.00.3042.00)
- ドライバー: sqljdbc.jar バージョン 1.0
- JBoss 3.2.6
- jdbc URL: jdbc:sqlserver://<>;
付録 B. デッドロックを強制する手順
- 接続 A を取得する
- 接続 B を取得する
- 接続Aでsql1を実行します
- 接続 B で sql2 を実行します
- 接続 B で sql1 を実行します
- 接続Aでsql2を実行します
where sql1: update member set name = name + 'x' WHERE member_id = 71
sql2: update member set name = name + 'x' WHERE member_id = 72
c# - ユニット(統合)テストの実行時のContextSwitchDeadlock
テストで実行すると、次のエラーが発生します。
このテストでは、EntityFrameworkを使用してデータベースからデータを取得するサービスレイヤー上のメソッドに対してWCF呼び出しを実行します。データは、EntLibキャッシングアプリケーションブロックを使用してサーバー側でもキャッシュされます。
サーバー側で同じコードをテストするテストは、エラーなしで合格します。
python - マルチプロセッシングのデバッグ手法
マルチプロセス アプリケーションのデバッグに問題があります (具体的には、Python のマルチプロセッシング モジュールでプロセス プールを使用しています)。明らかなデッドロックがあり、何が原因なのかわかりません。スタック トレースは、マルチプロセッシング モジュールのコードのみを表示するため、問題を説明するには不十分です。
Python ツール、またはデッドロックのデバッグに使用される一般的な手法はありますか?
sql-server - SQL Server でロック戦略を変更するには?
私は次のような記事を読みました: http://www.codinghorror.com/blog/archives/001166.html http://www.databasejournal.com/features/mssql/article.php/3566746/Controlling-Transactions-and -Locks-Part-5-SQL-2005-Snapshots.htm
私が理解していることから、SQL Server には非常に悲観的なロック戦略があります。また、パフォーマンスを向上させるには、ロッキング Read Committed スナップショットを変更する必要があります。
しかし、これを行う場所が見つかりません。ロック方法はどこで変更できますか?
concurrency - なぜ (Clojure で) ロックレスな同時実行がそれほど重要なのでしょうか?
Clojure にはロックレスの同時実行性があり、これは重要であると言われています。
私は多くの言語を使用してきましたが、それらが舞台裏でロックを実行していることに気づきませんでした。
Clojure (またはこの機能を持つ言語) でこれが利点になるのはなぜですか?
deadlock - プログラミングでデッドロックの問題が発生する頻度はどれくらいですか?
私は多くの言語でプログラミングを行ってきましたが、自分のコードにデッドロックがあることを認識していません。
私はそれが起こらないことを意味するためにこれを取りました.
これは (データベースではなくプログラミングで) 頻繁に発生するので、心配する必要がありますか?
ruby-on-rails - Rails コードでは、どのような種類の同時実行/デッドロックの問題に注意する必要がありますか?
デッドロックについて、つまりデッドロックとは何かを認識したところです。Rails コードに影響を与えるこの問題について心配しています。
Rails アプリの開発中に注意すべき特定のデッドロックの問題はありますか?
Rails コードでデッドロックに遭遇したことはありますか? あるいはその可能性はありますか?
(データベースのデッドロックについて言及しているわけではなく、アプリケーションのデッドロックのみを指しています)。