問題タブ [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.

0 投票する
22 に答える
28961 参照

sql-server - SQLServer2005でのデッドロックの診断

Stack Overflow SQL Server 2005データベースで、いくつかの有害ではあるがまれなデッドロック状態が発生しています。

プロファイラーを接続し、デッドロックのトラブルシューティングに関するこの優れた記事を使用してトレースプロファイルを設定し、多数の例をキャプチャしました。奇妙なことに、デッドロック書き込みは常に同じです:

他のデッドロックステートメントはさまざまですが、通常は、投稿テーブルの簡単で単純な読み取りです。これは常にデッドロックで殺されます。これが例です

完全に明確にするために、書き込み/書き込みのデッドロックは発生していませんが、読み取り/書き込みが発生しています。

現在、LINQクエリとパラメータ化されたSQLクエリが混在しています。with (nolock)すべてのSQLクエリに追加しました。これはいくつかの助けになったかもしれません。また、昨日修正した1つの(非常に)不十分なバッジクエリがありました。これは、毎回実行するのに20秒以上かかり、その上で毎分実行されていました。これがいくつかのロックの問題の原因であることを望んでいました!

残念ながら、約2時間前に別のデッドロックエラーが発生しました。同じ正確な症状、同じ正確な犯人の書き込み。

本当に奇妙なことは、上記のロッキング書き込みSQLステートメントが非常に特定のコードパスの一部であるということです。新しい回答が質問に追加された場合にのみ実行されます。親の質問が新しい回答数と最終日/ユーザーで更新されます。これは、明らかに、私たちが行っている膨大な数の読み取りに比べてそれほど一般的ではありません!私の知る限り、アプリ内のどこにも大量の書き込みは行っていません。

NOLOCKは一種の巨大なハンマーであることに気づきましたが、ここで実行するクエリのほとんどはそれほど正確である必要はありません。ユーザープロファイルが数秒古くなっていてもかまいませんか?

スコット・ハンゼルマンがここで説明しているように、LinqでNOLOCKを使用するのは少し難しいです。

私たちは使用するという考えでいちゃつく

すべてのLINQクエリにこのセットが含まれるように、ベースデータベースコンテキストで。それがなければ、私たちが行うすべてのLINQ呼び出し(まあ、それらの大部分である単純な読み取り呼び出し)を3〜4行のトランザクションコードブロックでラップする必要があります。これは醜いです。

SQL 2005での些細な読み取りによって、書き込みがデッドロックする可能性があることに少し不満を感じていると思います。書き込み/書き込みのデッドロックが大きな問題であることがわかりましたが、読み取りますか?ここでは銀行サイトを運営していません。毎回完璧な正確さを要求するわけではありません。

アイデア?考え?


すべての操作に対して新しいLINQtoSQL DataContextオブジェクトをインスタンス化していますか、それともすべての呼び出しで同じ静的コンテキストを共有していますか?

ジェレミー、ほとんどの場合、ベースコントローラーで1つの静的データコンテキストを共有しています。

すべてのコントローラーに対して、またはページごとに、または..より頻繁に新しいコンテキストを作成することをお勧めしますか?

0 投票する
15 に答える
35621 参照

database - Multiversion Concurrency Control (MVCC) とは何ですか? また、誰がそれをサポートしていますか?

最近、Jeff は、読み取りに関連するデータベースのデッドロックに関する彼の問題について 投稿しました。Multiversion Concurrency Control (MVCC)は、この問題を解決すると主張しています。それは何ですか、どのデータベースがそれをサポートしていますか?

更新:これらはそれをサポートしています(他にはどれですか?)

  • オラクル
  • postgresql
0 投票する
17 に答える
142417 参照

multithreading - デッドロックとは?

マルチスレッド アプリケーションを作成する際に発生する最も一般的な問題の 1 つは、デッドロックです。

コミュニティへの私の質問は次のとおりです。

  1. デッドロックとは?

  2. それらをどのように検出しますか?

  3. それらを処理しますか?

  4. 最後に、それらの発生をどのように防止しますか?

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

c# - 「食事の哲学者」シミュレーションのコーディングを開始するにはどうすればよいですか?

私は C# の初心者ではありませんが、理解を深める必要があるので、C# のより高度な概念のいくつかを独学できるように、古典的なデッドロックの問題をコーディングに選びました。食事の哲学者問題は良い問題のように思えますが、始めるには少し助けが必要です。オブジェクトとして「ダイナー」にアプローチする必要があることはわかっていますが、食事の間のランダムな遅延をシミュレートするには、各ダイナーを個別のスレッドでスレッド化する必要がありますか? すべてのアクションを監視するには、ある種の「マスター」が必要ですか? 一般的な設計コンセプトのアドバイスは大歓迎ですが、練習として単調なプログラミングをしたいと思います。ありがとう!

0 投票する
3 に答える
3355 参照

sql-server - SQL Server 2000 - デッドロックのデバッグ

SQL Server 2000 データベースのデッドロックの問題をデバッグして追跡する方法についての提案を探しています。トレース フラグ 1024 と 3605 を使用するように勧められました。

1024 - このトレース フラグは、デッドロックに関与しているロックの種類と影響を受ける現在のコマンドを返します。

3605 - このトレース フラグは、トレース出力をエラー ログに送信します。

特定のストアド プロシージャ、テーブル、およびインデックスは引き続き明らかにする必要があるため、これらのトレース フラグを使用して明らかにすることが目標です。そしてそこから、チューニングが必要なインデックス、クエリをチューニングするためのヒントのロック、および修正が必要な潜在的な sproc バグをよりよく知ることができます。

これをすべて共通の問題に追い込むための他の提案やハッピーエンドの戦争の話はありますか?

0 投票する
4 に答える
2593 参照

sql - データベースでトランザクションを使用する際の問題は何ですか?

この投稿から。明らかな問題の 1 つは、スケーラビリティ/パフォーマンスです。トランザクションの使用が引き起こす他の問題は何ですか?

問題には、長時間実行されるトランザクションと短時間実行されるトランザクションの 2 つのセットがあると言えますか? はいの場合、それらをどのように定義しますか?

編集: デッドロックは別の問題ですが、アプリケーション ドメインによっては、データの不整合がさらに悪化する可能性があります。トランザクションに値するドメイン (標準的な例を使用する銀行業) を想定すると、デッドロックの可能性は、トランザクションの使用に関する問題ではなく、データの一貫性を確保するために支払うコストのようなものですか? それとも同意しませんか? もしそうなら、デッドロックのないデータの一貫性を確保するために、他にどのようなソリューションを使用しますか?

0 投票する
3 に答える
2106 参照

database - Firebird を使用したスレッドでの ID デッドロック

特定のスレッド内の特定のトランザクションのデッドロックを特定するための最良の方法を探している開発者。デッドロック エラーが発生していますが、これらは FB 2.0 では非常に一般的です

デッドロックが発生し、クライアントと DB 間の DB 接続が切断されます。

  • ライブ (1 秒に 1 回) データを DB に送信します。
  • 約 30 スレッドのスレッド プールを開き、それらを使用してデータを取り込みます (毎秒約 1 ~ 2 kB)。
  • ストリームを可能な限り最新の状態に保つためにプール内の次のスレッドを使用するほど、DB が処理できる量が限られる場合があります。

これにより、最大スレッド数に達して接続が切断されるだけでなく、デッドロックが発生する場合があります。

したがって、これが毎秒この量のデータを取り込むための最良の方法であるかどうかについて、本当に意見が必要です. これらのクライアントでは、最大 100 のクライアントが同時に DB にヒットしています。
平均的なトランザクションは、1 日あたり約 150 万から 180 万です。

0 投票する
5 に答える
8175 参照

ruby - ThreadPool のデッドロック

Ruby 用の適切な ThreadPool 実装が見つからなかったので、自分で作成しました (部分的にここのコードに基づいています: http://web.archive.org/web/20081204101031/http://snippets.dzone.com:80/ posts/show/3276ですが、スレッドプールのシャットダウンのために wait/signal およびその他の実装に変更されました. ただし、しばらく実行した後 (100 のスレッドがあり、約 1300 のタスクを処理)、25 行目でデッドロックが発生し、新しいジョブを待機します。アイデアはありますか?なぜそれが起こるのでしょうか?

0 投票する
6 に答える
2501 参照

winapi - Win32 プログラムのデッドロックの診断

Win32 プロダクション プロセスでのデッドロックによる明らかなハングをデバッグするための手順とテクニックは何ですか。この目的で WinDbg を使用できると聞きましたが、これを実現する方法について明確なヒントを教えてください。

0 投票する
10 に答える
7945 参照

sql - 設計によるゼロ SQL デッドロック - コーディング パターンはありますか?

MS SQL Server 2005 上で実行されている .NET 2.0 webapp で、非常にまれではありますが厄介な SQL デッドロックに遭遇しています。これまで、私たちは非常に経験的な方法で SQL デッドロックに対処してきました。

しかし、このアプローチは非常に不十分であることがわかりました。時間がかかり、信頼性がありません。私は、SQL デッドロックが決して発生しないように設計されている決定論的なクエリ パターンに従うことを強く望んでいます。

たとえば、C# のマルチスレッド プログラミングでは、辞書式の順序に従ってロックを取得する必要があるなどの単純な設計ルールにより、デッドロックが発生しないことが保証れます。

デッドロック防止が保証されている SQL コーディング パターンはありますか?