問題タブ [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.
php - MySQL の回避 'ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションを再開してみてください」
次のような mysql デッドロック エラーが発生することがあります。
'ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションを再開してみてください」
複数のphpプロセスが同時に実行され、テーブルから行を選択しているキューテーブルがあります。ただし、プロセスごとに、フェッチごとに一意の行のバッチを取得する必要があるため、重複する行が選択されないようにします。
だから私はこのクエリを実行します:(これはデッドロックエラーが発生するクエリです)
私もよ:
同時にテーブルに行を挿入する(トランザクション/ロックなし)
テーブル内の行を同時に更新する(トランザクション/ロックなし)
同時にテーブルから行を削除する(トランザクション/ロックなし)
同様に、私の更新と削除は、process_idが割り当てられている行のみを更新および削除します...そして、「SELECT行... FOR UPDATE」というトランザクションを実行する場所は、process_id = nullです。理論的には、それらが重複することはありません。
これらのデッドロックを回避する適切な方法があるかどうか疑問に思っていますか?
あるトランザクションがテーブルの選択/更新中にテーブルを長時間ロックし、別のプロセスが同じトランザクションを実行しようとしてタイムアウトしたためにデッドロックが発生する可能性はありますか?
どんな助けでも大歓迎です
performance - 同じサーバー上のデータベース全体のテーブルにアクセスする
複数のデータベースにまたがる巨大なアプリケーションがあります。いくつかの場所で、DB2 のストアド プロシージャから DB1 のテーブルのデータを更新する必要があります。現在、DB2 で作成されたビューを介して DB1 からテーブルにアクセスしています。ただし、時間が経過し、データ量が増えるにつれて、パフォーマンスが低下し始め、この手順で多くのデッドロックが発生しています。DB1 のテーブルに適切なインデックスが設定されました。現在、SQL Server 2008 を使用しており、物理的に両方のデータベースが同じサーバー上にあります。
実用的なアドバイスをいただければ幸いです。
php - MYISAM から InnoDb への変換時に発生する可能性のあるデッドロックは何ですか?
データベースを MYISAM ストレージ エンジンから InnoDb エンジンに変換するときは、アプリケーション コードにデッドロックのサポートを追加する必要があると読み続けています。私は知る必要がある:
これらのデッドロックは何ですか?
データベースを InnoDb に変換した後、それらを処理する機能をアプリケーション コードに追加するにはどうすればよいでしょうか?
この件に関するこれ以上の情報は大歓迎です。
sql-server - SQL ジョブ キュー実装におけるインデックスとロック戦略
SQL 2008+ では、次の Queue テーブルと Enqueue、Dequeue 操作は、複数のジェネレーターとコンシューマー間のストリーム内で効率的なジョブ キューイングを任意の名前付きキューで任意の部分的に順序付けられた連続で許可することを目的としています。RetryLater()、FailNow()、Reset() (表示されていません) によるポイズン メッセージ処理の簡単なサポート。
コンシューマ トランザクションは、Dequeue() の前からアプリケーション側の処理を通じて、DELETE、RetryLater()、または FailNow() まで開いたままになります。
- この設計は健全ですか?
- このセットアップのデッドロックはありませんか?
- IDX_Queue_IsFailed_QueueName_DelayUntilUTC またはその他のインデックスがデッドロックフリーネスに与える可能性のある悪影響は何ですか?
- 他に有益な指標は何ですか?
- テーブルのパーティショニング (queueName による) やその他の機能によって、スケーラビリティがどのように向上しますか?
考えられるように、ジェネレーターは、タイトなポーリングを回避するためにデータがキューに入れられたことを外部メカニズムを通じてコンシューマーに通知します。代わりに (SQL ServiceBroker を使用せずに) SQL Locks を使用して、ジェネレーターが名前付きキューに書き込むまで利用可能な行がない Consumer を効率的にロックする方法はありますか?
CREATE INDEX [IDX_Queue_IsFailed_QueueName_DelayUntilUTC] ON [dbo].[Queue] ([IsFailed], [QueueName], [DelayUntilUTC])
また、先行するものがないものを常に取得する限り、OrderBy は問題ではないと思います。
entity-framework - Entity Framework によるデッドロック - トランザクションを再実行する方法は?
ここで少し厳しい状況が発生しました。システムで時折デッドロックが発生しています。また、私はデータベースの同時実行に関して強いバックグラウンドをまったく持っていません。
データベースにアクセスするアプリケーションはいくつかあります。Entity Framework を使用してデータベースにアクセスするメインの MVC アプリと、それぞれが ADO.NET と生の SQL を使用して DB にクエリを実行し、BinaryTap ActiveRecord を介してデータを挿入するいくつかの単純なコンソール アプリです。
残念ながら、私はクライアント組織の FNG であるため、新しいアイデアを展開してテストすることはできません。また、SSMS Express を使用しているため、SQL プロファイラーにアクセスできません。しかし、問題をすぐに修正することはそれほど重要ではなく、問題の分析を文書化することがより重要です。
トランザクションを再実行する必要があるというエラー メッセージに真実はありますか? これが DaoBase です。HttpContext ごとに 1 つの ObjectContext を (Db プロパティを介して) 使用しています。私たちは常に Dao の更新 (クエリではない) を SafeAction に入れているので、それらはトランザクションにラップされます。トランザクションを適切に再実行しようとしていますか?
他のアプリは、ADO.NET/Raw SQL を介してデータベースにクエリを実行します。それぞれの SELECT ステートメントにはWITH (NOLOCK)
指定がありません。純粋なクエリをロックしたい状況はありますか? また、クエリが作成するロックの種類は、行とページのロックですか? Entity Framework によって生成されたクエリについてはどうですか?クエリをロックしないように EF に指示する必要がありますか?
ここまで読んでくださった皆様、ありがとうございました。私はこれが複雑な問題であることを知っており、やるべきことがたくさんあります..
sql - INSERTの再試行によるデッドロック
次のsprocは、テーブルに行を挿入し、対応するテーブルのPKに使用されるランダムIDを生成しようとします。ランダムに生成されたIDとの衝突は、catchブロックで処理され、プロシージャが再試行/再呼び出しされます。現在、ロックは長期間保持されるため、これには長い時間がかかり、デッドロックが発生します。再試行の直前にデッドロックを解放して、他のスレッドがPKインデックスのロックに成功する可能性がある短いウィンドウが存在するようにする方法はありますか?
sql-server - 非クエリに sp_execute を使用しないように Hibernate を強制する
Hibernate で sp_execute を使用しないようにする方法はありますか?
このコードを検討してください
それはsp_prepare、次にsp_executeに変わり、目的を無効にします: このステートメントを実行した後、セッションのデッドロックの優先度は NORMAL に戻ります
.NET では、次のコードはステートメントを直接実行し、セッションの優先度は (必要に応じて) LOW のままです。
同じ方法でHibernateにステートメントを送信させる方法は?
entity-framework-4 - 複数の行を並行して挿入すると、Entity Framework でデッドロックが発生する
EF を使用して複数のエンティティを並行して挿入する際に問題が発生しています。WCF 操作は、多くのプロセスによって呼び出され、各呼び出しで異なる分散トランザクションを持つエンティティを生成します。SQL サーバー プロファイラーで確認できるように、次の SQL が生成されます。
したがって、EF は挿入を行い、後で選択を行います。並行して行われるため、それらの多くはデッドロックによって中止されます。
4.1 や 4.2 ではなく、EF 4.0 を使用しています。
これを解決する方法はありますか?私はこれを見たことがありますが、かなり古いものです: http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/4f634d8f-1281-430b-b664-ec7ca413b387/
php - MySQL デッドロックの問題 (PHP/MYSQL)
MySQL からデッド ロック エラーが発生しているコードのセクションがあります。基本的に、フィールドを取得するために選択を行っています。そのフィールドに応じて、同じレコードのカウンターをインクリメントするか、別のレコードを挿入します。このコードは、他のいくつかのシステムによって呼び出されています。
ここに私がやっていることのいくつかの切り抜きがあります: (PHP/ZendFramework/MySQL)
[編集]これが役立つかもしれないと考えた:
mysql - 選択クエリのみでmysql関数のデッドロックを回避するには?
tree_elements という名前のテーブルから仮想パス名を作成する関数が 2 つあります。関数 path(id,language) は、テーブルの更新時に呼び出されます。テーブルの更新によってデッドロックが発生し、エラー メッセージが表示されることがあります (例)。
ロックがかかる理由がわかりません。関数は選択のみを使用し、更新、挿入、削除は使用しません。どうすればこの現象を回避できますか?
私の機能があります: