問題タブ [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.
nhibernate - NHibernate トランザクション エラーの処理
私たちのアプリケーション (NHibernate と ASP.NET MVC を使用) は、ストレス テストを行うと、多くの NHibernate トランザクション エラーをスローします。主なタイプは次のとおりです。
- トランザクションが接続されていないか、切断されました
- 行が別のトランザクションによって更新または削除された (または、保存されていない値のマッピングが正しくない)
- トランザクション (プロセス ID 177) は、別のプロセスとのロック リソースでデッドロックされ、デッドロックの犠牲者として選択されました。トランザクションを再実行します。
誰かが例外 1 の理由を特定するのを手伝ってくれますか? コード内の他の例外を処理する必要があることはわかっています。これらのエラーを効率的に処理するのに役立つリソースを教えてもらえますか?
Q. セッションとトランザクションはどのように管理しますか?
A. Autofacを使用しています。すべてのサーバー リクエストに対して、コンテナの有効期間スコープ内のセッションを持つ新しいリクエスト コンテナを作成します。セッションをアクティブ化すると、トランザクションが開始されます。リクエストが完了すると、トランザクションをコミットします。場合によっては、トランザクションが巨大になる可能性があります。簡単にするために、すべてのサーバー要求はトランザクションに含まれています。
mysql - oracle と innodb を使用したシナリオでテーブルのデッドロックを最小限に抑える
1 回のトランザクションで 1 ~ 3 個のテーブルを更新する 35 個の関数があります。ただし、更新を実行するだけでなく、クエリも実行します。
- 表 1 は、行更新のみのアクションといくつかの照会を行います。
- 表 2 は、既存の行に対してクエリと行レベルの更新を行い、場合によっては行を削除および追加します。表 2 には、行の削除、挿入、または更新の前後に、トランザクション内にクエリがある場合があります。
- 表 3 は、上記の表 2 のアクションの結果に基づいて行の更新を行います。
私の最初のアクションは、最後にテーブル 3 の更新がすべて完了していることを確認することです。
表 1 は他の 2 つの表から独立しており、おそらく最初または最後になる可能性があります。したがって、表 2 は表 3 が変更される前に来る必要があります。
私の最初の懸念は、表 2 のアクションでは、クエリを実行してから更新を行い、さらにクエリを実行し、さらに更新を実行する場合があることです。これを行わないようにコードを再編成する必要がありますか。
私の 2 番目の懸念は、テーブル 3 が、サーブレット スレッドで高速でなければならないテーブルであるということです。表 3 は、単独で単純に照会するために使用されます。しかし、行レベルのロックがこれらのクエリを停止するようです。
必要に応じて、上記のテーブル セット メンテナンス コードを、1 つのスレッドから 1 つのクラスター全体のプロセスに入れることができます。更新速度は問題ありません。ただ、テーブル 3 に対するクエリは高速です。そして、デッドロックが発生することはありません。
Oracle と Innodb の違いがわからないので、そこで質問があります。(後で Oracle にアップグレードする予定です。)
基本的に、私は何に注意すべきかについての指針を探しています。もちろん、各 updater 関数の開始時にテーブル 2 とテーブル 3 の完全なテーブル ロックを強制することもできますが、そうすると Table3 サーブレット クエリ スレッドが影響を受けます。だから、それは解決策のようには見えません。
また、テーブル 2 自体に関連して、一部の関数がクエリを実行し、クエリに基づいて更新し、更新に基づいて新しいクエリを実行し、結果をテーブル 3 に更新するなど、さらに多くの更新を行うことを心配しています。本当に厄介です。
おすすめは?アンディ
2 つのテーブルの同じ行が同時に更新される可能性があるため、テーブルを同じ順序で更新するように注意しました。テーブルの 1 つに 2 つのインデックスがあり、インデックスを更新するにはテーブル ロックが必要なようです。一部の関数は、繰り返しループで、テーブル 1 をクエリし、テーブル 1 を更新し、オプションでテーブル 2 をクエリし、テーブル 2 を更新します。このテーブルは、すべてのコンテンツのツリーにすべての親子関係を保持するため、すべてのユーザーにわたって大量の更新が行われます。
mysql - Mediawikiデータベースエラー1205
http://konton.us/wikiにmediawikiの新しいコピーをインストールしました
ウィキをいじって、その場所を情報でいっぱいにして、突然、Gameplay_Mechanicsという名前の記事を作成したとき、すべてが死んでしまいました。
http://konton.us/wiki/Gameplay_Mechanics
このエラーが発生しました:
データベースクエリの構文エラーが発生しました。これは、ソフトウェアのバグを示している可能性があります。最後に試行されたデータベースクエリは、関数 ""内から(SQLクエリが非表示)でした。データベースがエラー「1205:ロック待機タイムアウトを超えました。トランザクション(internal-db.s76387.gridserver.com)を再起動してみてください」を返しました。
記事を「空にして」保存することで修正できましたが、再入力するだけでしたが、1日も経たないうちに再び発生したので、実際のルートとは何か疑問に思っています。このばかげたエラーの原因。
すべての助けに感謝します
sql-server - EntityFrameworkのデッドロックの問題
.NET4用の新しいEntityFrameworkで奇妙な問題が発生しています
SQL Server 2005(EXPRESS)データベースがあり、サービスはエンティティフレームワークを使用して2つのテーブルにデータを書き込みます。テーブルがTableAとTableBであるとしましょう。TableBにはTableAへの外部キーがあります。私のプログラムには、データを並列に書き込むスレッドがいくつかあります。各スレッドには独自のObjectContextがあります。プログラムはTableAオブジェクトを作成し、それをオブジェクトコンテキストに配置します。次に、TableBのオブジェクトが作成され、オブジェクトコンテキストに配置されます。これは、いくつかのTableAアイテムに対して繰り返されます。
最後に、ObjectContext.Saveメソッドが呼び出されると、ログにデッドロックエラーが表示されます。
System.Data.SqlClient.SqlException:トランザクション(プロセスID 56)が別のプロセスのロックリソースでデッドロックされ、デッドロックの犠牲者として選択されました。トランザクションを再実行します。
特定のデータベースでのみ再現されるため、データベースのオプションに依存しているようです。1つの新しいデータベースの問題は再現されていません。Entity Frameworkがバッチ挿入を実行している間、どのデータベース\テーブル設定がデッドロックに影響を与える可能性がありますか?それともどこか別の問題かもしれませんか?
sql - テーブルから参照されていない行を選択してロックするにはどうすればよいですか?
シャレーがアカウントによって参照されるシャレーのテーブルがあります...
シャレーは参照されていないところから始まります。ユーザーがシャレーを購入すると、コードは参照されていないシャレーを見つけて、新しく作成されたアカウントに割り当てる必要があります。返されたシャレーには、同時購入者が同じシャレーに割り当てられないようにするために、それを参照するアカウントがコミットされるまで UPDLOCK が必要であると思います。
シャレーをフェッチする SELECT をどのように記述できますか? こんなことを考えていた..
問題は、このクエリが同時に実行されている場合、あるクエリが一方のテーブルの半分をロックし、別のクエリが残りの半分をロックし、デッドロックが確実になることだと思います。これを回避する方法はありますか?たとえば、選択したシャレーの行を同じ順序でロックすることは可能ですか?
乾杯、イアン。
sql-server - 金融業務におけるロック、デッドロックの問題とは?
サブクエスティング SQL - 「with ( nolock )」を使用する必要がある場合</a>
ある地元の金融機関では、MS SQL Server 2005 データベースの (ブロック) 問題をブロックすることは私にはあまり意味をなさないという私の意見を彼らのプログラマーに表明したことで、彼らのプログラマーに叱責されました。
新しい修正レコードをデータベースに挿入 (追加) することにより、財務操作が更新、削除され、さらには誤った操作 (「トランザクション」の一部) が修正されない場合、ロック、ブロック、デッドロックの可能性についてどのような問題が考えられますか?
これを英語で何という?他の言語では、storno、stornoed (?) オペレーション/レコードと呼ばれます。
したがって、私が理解しているように、「トランザクション」は実際にロールバックされることはなく、誤った/存在しないレコードは決してなく、実際化されていないレコードのみがあります。
更新:
私は storno をグーグル検索しましたが、英語での定義または英語のテキストでの使用を含む結果を見つけることができませんでした.
storno (ラテン文字) の定義はイタリア語のみで見つかりました。
しかし、会計はイタリアで発明され、イタリアの会計用語の多くは他の言語で使用されています。たとえば、ロシアの会計 (銀行) などです。
また、国際的に通用する金融業務会計の実践だと思いましたね。
更新 2:
S.Lott は、ERP アプリケーションでトランザクションが取り消される方法は大したことです!
へのリンクを教えてくれました。storn が反転トランザクションであることを伝えます。
まあ、これは正しくありません。Storno はトランザクションだけでなく、誤った操作を修正する操作 (トランザクションの一部) ですが、2 つの操作を組み合わせると、トランザクション (ターゲット アカウントとソース アカウントでのクレジットとデビットの 2 つの操作で構成される) が逆になるように見える場合があります。
では、Storno は世界中で一般的な財務会計業務ではありませんか?
とにかく、会計の詳細/技術/用語の議論を避け、記録が削除または更新されない場合の文脈に質問を制限したいと思います.
このコンテキストでのロック、ブロッキング、デッドロック、パフォーマンスで考えられる問題は何ですか?
db2 - DB2上の複数のテーブルに対してWHERE条件を使用して安全な「SELECTFORUPDATE」を実行するにはどうすればよいですか?
問題
DB2(バージョン9.5)では、SQLステートメント
エラーメッセージが表示されますSQLSTATE=42829
(カーソルで指定されたテーブルは変更できないため、FOR UPDATE句は使用できません)。
追加情報
WITH RR
分離レベルで実行しているため、を指定する必要がありますREAD_COMMITTED
が、同じクエリを実行している別のプロセスがある間、クエリをブロックする必要があります。
これまでの解決策...
代わりに次のようにクエリすると、次のようになります。
すべてが正常に動作します。
新しい問題
しかし、複数のプロセスがこのクエリを同時に実行すると、デッドロック例外が発生することがあります。
質問
FOR UPDATE
デッドロックが発生する可能性のある場所を導入せずにクエリを作成する方法はありますか?
nservicebus - 自身のパブリッシュされたメッセージをサブスクライブする NServiceBus ホスト
使用した NServiceBus のバージョン: 2.0.0.1145
質問:
NServiceBus ホストを構成して、自身の公開メッセージを消費 (サブスクライブ) することはできますか?
答え:
可能だと思われますが、次の構成では、サブスクリプションを SubscriptionStorage に挿入しようとしているときに、トランザクションのデッドロック例外が発生します。DbSubscriptionStorage と複数の「NumberOfWorkerThreads」を使用すると発生します。
エラー:
Could not execute command:
INSERT INTO Subscription (SubscriberEndpoint, MessageType) VALUES (@p0, @p1)
System.Data.SqlClinet.SqlException:
Transaction was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
その後、NServiceBus は切断を試みますが、まだ進行中のトランザクションがあり、UnhandledException をスローするため失敗します。
再現方法:
ここに私のApp.Configがあります:
私のバス構成:
サブスクリプションとサガ データベースの両方の dbProperties は次のとおりです。
NumberOfWorkerThreads を 1 より大きくしない限り、すべて正常に動作します。それよりも大きいと、上記のエラーがスローされます。
何も忘れていないことを願っています。事前にご協力いただきありがとうございます。
asp.net - テーブルに行を挿入中に SQL Server がデッドロックする
SQL Server のデッドロックのトピックは何度も議論されてきましたが、テーブルへの 2 つの同時挿入でさえもデッドロック状態になる可能性があるとは確信が持てませんでした。
シナリオ: アプリケーション (バックエンドとして SQL Server 2005、ASP.net 3.5) をテストしているときに、テーブルにレコードを同時に挿入したところ (簡略化された概要)、70% 以上のユーザーでデッドロックが発生しました。これは複数のリソースの場合ではないため、挿入がデッドロックになっている方法として、これを理解できませんでした。詳細な分析 (2 人のユーザーによるバグの再現) の後、両方のプロセスがテーブルの主キー インデックスで RangeS-S ロックを保持しており、これを RangeI-N ロックに変換しようとしていることがわかりました。デッドロックと 1 つのトランザクションが強制終了されます。
質問: これはリソースのアクセス順序の変更の場合ではないため、この種のデッドロックを回避または削減できますか? 他のプロセスをブロックしてデッドロックを回避するために、トランザクションに最初に排他ロックを強制することはできませんか? どのような(悪影響を)与える可能性がありますか? また、RangeI-N ロックについて詳しく説明できる人もいます。
これの分離レベルは「シリアル化可能」でした。
どんな提案も役に立ちます。
ありがとう、ガウラフ
c# - デッドロックのヘルプが必要です
私には独特の状況があります。コードのさまざまな部分と何千ものクライアントから常にアクセスされるテーブルがあるため、テーブルの単純な更新と挿入を行うときにトランザクションを使用しました。問題は、デッドロックエラーが発生し続けることです。誰かが私がこの問題をどのように軽減できるか考えていますか?