問題タブ [database-deadlocks]

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 投票する
3 に答える
6473 参照

sql-server - I have data about deadlocks, but I can't understand why they occur

I am receiving a lot of deadlocks in my big web application.

How to automatically re-run deadlocked transaction? (ASP.NET MVC/SQL Server)

Here I wanted to re-run deadlocked transactions, but I was told to get rid of the deadlocks - it's much better, than trying to catch the deadlocks.

So I spent the whole day with SQL Profiler, setting the tracing keys etc. And this is what I got.

There's a Users table. I have a very high usable page with the following query (it's not the only query, but it's the one that causes troubles)

And then there's the following query in ALL pages:

That's where I get User from cookies.

Very often a deadlock occurs and this second Linq-to-SQL query is chosen as a victim, so it's not run, and users of my site see an error screen.

This is information from the .XDL graph captured by SQL Profiler (It's just the first deadlock, it's not the only one. The whole list is gigantic.):

I read a lot about deadlocks... And I don't understand why this is causing a deadlock.

So obviously both of this queries run very often. At least once a second. Maybe even more often (300-400 users online). So they can be run at the same time very easily, but why does it cause a deadlock? Please help.

Thank you

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

sql-server-2005 - SQL Server 2005のデッドロック!2つのリアルタイムバルクアップサートが戦っています。なぜ?

代替テキスト

シナリオは次のとおりです。

MarketDataCurrent(MDC)というテーブルがあり、株価がライブで更新されています。

ワイヤーからストリーミングされている価格を読み取り、挿入をキューに入れ、「一時テーブルへの一括アップロード、次にMDCテーブルへの挿入/更新」を使用する「LiveFeed」という1つのプロセスがあります。(BulkUpsert)

このデータを読み取り、他のデータを計算し、同様のBulkUpsertストアドプロシージャを使用して結果を同じテーブルに保存する別のプロセスがあります。

第三に、C#Guiを実行してMDCテーブルをポーリングし、そこから更新を読み取るユーザーが多数います。

現在、データが急速に変化している日中は、物事は非常にスムーズに実行されますが、その後、営業時間後、データベースからデッドロック例外が発生することが最近増え始めています。現在、1日あたり10〜20が発生しています。 。ここで重要なことは、これらは値が変更されていないときに発生するということです。

関連するすべての情報は次のとおりです。

テーブル定義:

-

代替テキスト

デッドロックをキャッチするSQLプロファイラートレースを実行しています。すべてのグラフは次のようになります。

代替テキスト

プロセス258は、次の「BulkUpsert」ストアドプロシージャと繰り返し呼び出され、73は次のプロシージャを呼び出します。

そしてもう1つ:

明確にするために、これらの一時テーブルは同じ接続上のC#コードによって作成されており、C#SqlBulkCopyクラスを使用して入力されます。

私には、テーブルのPKでデッドロックが発生しているように見えるので、そのPKを削除して、代わりに一意性制約に切り替えてみましたが、デッドロックの数が10倍になりました。

私はこの状況について何をすべきかについて完全に迷っていて、どんな提案にもオープンです。

ヘルプ!!


XDLのリクエストに応じて、次のようになります。

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

php - 更新を選択して、電子商取引を行い、PHP で MySQL ストアド プロシージャを呼び出すことは可能ですか?

現在、クライアント用の PHP e コマース Web サイトを構築しています。順調に進んでいますが、障害にぶつかり、MySQL/PHP の専門家が助けてくれるかどうか疑問に思っていました。基本的に、e コマース サイトは商品を 1 回だけ販売します (つまり、商品ごとに 1 つの数量しか在庫がありません)。つまり、顧客がその商品をチェックアウトすると、それ以上購入することはできません。

そのため、チェックアウト時に、商品がまだ在庫があるかどうかを確認する必要があります。これがトラフィックの多いサイトであると仮定すると、2 人以上の顧客が同時にチェックアウトしようとする場合があり、両方が製品を購入できる可能性があります。それを防ぐために、私の計画は次のとおりです。

  1. テーブルの行をロックするには、製品で [...FOR UPDATE] を選択します。
  2. 電子商取引を行う (Paypal、authorize.net など)
  3. e コマース トランザクションが成功した場合は、MySQL ストアド プロシージャ (SQL トランザクションも持つ) を呼び出して、注文情報などを保存します。または、失敗した場合はロールバックします。

この計画を実現することは可能ですか?SELECT...FOR UPDATE を実行するには、SQL トランザクションを開始する必要がありますが、その後、MySQL ストアド プロシージャ内のステップ 3 で別のトランザクションも開始しています。何が起こるかわかりません。また、この計画は行き詰まりのシナリオにつながりますか?

長い質問で申し訳ありませんが、助けていただければ幸いです。

0 投票する
2 に答える
4875 参照

postgresql - Postgresql: 外部キー制約評価からの暗黙的なロック取得

それで、Postgresql での外部キー制約の処理について混乱しています。(バージョン 8.4.4、その価値はあります)。

いくつかのテーブルがあり、以下に穏やかに匿名化されています。

そこで、いくつかのクエリを実行するために 2 つのデータベース ウィンドウを用意しました。

db2 接続がブロックされます。

device_stuff の「左」列の更新がデバイス テーブルのアクティビティの影響を受けるというのは奇妙に思えます。しかし、そうです。実際、db1 に戻ると、次のようになります。

pgsql ログには次の内容があります。

私には 2 つの問題があると思います。1 つ目は、この種のロックが発生する正確なメカニズムを理解していないことです。pg_locks をクエリして、ステートメントが呼び出すロックの種類を確認するための便利なクエリがいくつかありますが、update device_fooコマンドを単独で実行したときに、この特定の種類のロックを観察することはできませんでした。(おそらく、私は何か間違ったことをしているのかもしれません。) また、外部キー制約チェックのロック取得動作に関するドキュメントも見つかりません。私が持っているのはログメッセージだけです。このことから、行を変更すると、外部キーが設定されているすべてのテーブルで更新ロックが取得されると推測できますか?

2番目の問題は、そのようにならないようにする方法を見つけたいということです。実際のアプリケーションで時々デッドロックが発生します。device_fooデバイス テーブルで大きなロックを取得することなく、すべての行に影響を与える大きな更新ステートメントを実行できるようにしたいと考えています。(テーブルでは多くのアクセスが行われており、device取得するのにコストのかかるロックのようなものです。)

0 投票する
2 に答える
2160 参照

sql-server - SQL XDLファイルで、デッドロックしているプロセスノードのwaitresource属性を読み取るにはどうすればよいですか?

SQL Server 2005では、

同じテーブル内の2つの異なるキーを更新すると、デッドロックが発生します。

以下から、これら2つのwaitresourceの開始部分は同じですが、終了部分が異なることに注意してください。

これらの2つのキーはロックされており、その理由を理解する必要があります。

question:_

括弧内の値が異なる場合、キーの前半が同じであるのはなぜですか?

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

sql - SQLServerトレース-PAGE情報を実際のリソースに変換する

私は、アプリケーションで発生しているデッドロックを調査しています。1204、1205、3605のトレースをオンにしました。デッドロックトレースは問題なく取得できました。しかし、私はそれがデッドロックしているリソースを理解することができません。私は多くのフォーラムを読みましたが、それらはすべて、問題のリソースを指すKEY/RIDと呼ばれるものをトレースに含める必要があると言っています。しかし、私のトレースファイルにはKEY/RIDがまったく含まれていません。代わりに、PAGEと呼ばれるものが含まれています。

たとえば、06/30/2010 16:29:52、spid4s、Unknown、PAGE:8:1:16512 CleanCnt:2 Mode:IX Flags:0x2 06/30/2010 16:29:52、spid4s、Unknown、PAGE :8:1:5293 CleanCnt:2モード:IXフラグ:0x2

取得したこのページ情報に基づいて、このリソースが何であるかをどのように判断できますか?よろしくお願いします!

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

concurrency - デッドロックが検出された場合の動作

ロック システムを備えたデータベースを実装したいとします。ロック回避を使用して、データベースを取得する前に潜在的なデッドロックを回避しようとします。

私の質問は:

セッション/トランザクションがリソース A の取得に成功し、リソース B のロックを取得しようとすると、デッドロックが検出されます。

したがって、セッションは B のロックの取得に失敗します。システムは、セッションが保持している他のリソース (この場合は A) を強制的に放棄し、セッションを無効にする必要がありますか?

または、この状況に対処するための他のより標準的な方法はありますか?

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

sql - Sql Server 2005 で UPDATE 文を使用してデッドロックを回避するための最適な分離レベル

SQL Server テーブルに対して update ステートメントを実行する必要があります。このテーブルは、同時に別のプロセスによって使用されています。デッドロックが発生することがあるため、これらのデッドロックを回避または最小限に抑えるために、どの分離レベルをお勧めしますか?

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

sql - SQLデッドロックの質問

これら 2 つのステートメントがリレーショナル データベースでデッドロックする可能性はありますか? 私は質問と例を単純化しようとしています-通常は共有可能な読み取りロックのみを必要とするこれらの選択には、排他的な読み取りロックが必要であると想定してください:

つまり、結合の順序は重要ですか? SQLアトミックの単一ステートメントはありますか? 最初のステートメントで A が最初にロックされ、次に B がロックされ、2 番目のステートメントで B が最初にロックされ、次に A がロックされますか?

私はそうは思いません - 私の直感によると、このような 2 つの単一のステートメントは、どんなに複雑であってもデッドロックすることはありません。ステートメントは全体として分析され、ロックを必要とするリソースは決定論的なグローバル順序 (つまりアルファベット順) を使用してロックされると私は信じています。しかし、これについては直感以上のものが必要です。それを証明する方法が思いつかず、ドキュメントも見つかりません。

私は MS SQL 2005 に興味がありますが、質問は実装固有のものではないと思います。

二次的に: MS SQL に関連するので、共通テーブル式にもこの保証があることを知りたいと思います.CTE は主に構文上の利点 (+ 再帰) であり、エンジンによって従来の単一のステートメントに統合されます。

0 投票する
2 に答える
206 参照

sql-server-2008 - SQL Serverのデッドロック(SQL Server 2000)

1日に5回以上のデッドロックが発生しているお客様が1人います。170以上の他の顧客は、デッドロックをまったく受けません。デッドロックトレースを実装しましたが、デッドロックの選択/更新/挿入が発生しているのを確認できます。with(rowlock)ヒントを実装しました。これにより、最初のデッドロックが分類されました。しかし、それでも事態はさらに先に行き詰まります。

お客様がカスタムSQLを実行していることを発見しました。これにより、問題の一部が発生しましたが、すべてではありません。

私の質問は、顧客をSQLServer2000からSQLServer2008にアップグレードすることで問題が解決する可能性があるかどうかを誰かが知っているかどうかです。

ありがとう、

大佐