2016-09-23 7 views
2

私は最近mysql 5.7にアップグレードし、頻繁なデッドロックの問題を観察しました。前にこの問題を経験しなかったので5.7のロックに関連する変更はありますか?私は最近mysql 5.7にアップグレードし、頻繁なデッドロックの問題を観察しました。 5.7でのロックに関連する変更はありますか?

私はretry_recordsが自動を持つと呼ばれる単純なテーブルを持っているが一意のインデックスと2つの列と主キーと列unique_referenceとしてIDをインクリメント。このテーブルは、コードのセクションでは、このテーブルからn個のレコードを選択した場合、プロセスデータ完全マルチスレッド環境で使用され、プロセス障害およびコードの他の部分の場合には、このテーブルを更新するテーブルと他のいくつかの処理されたレコードを削除され、取得されますコードのセクションがこのテーブルに新しいレコードを挿入しています。どのクエリにも結合はなく、一括挿入、一括更新、選択以外の一括削除はありません。すべての更新/削除/挿入トランザクションには単一の文があります。それでも私は挿入時にデッドロックを観察しています。

------------------------ 
LATEST DETECTED DEADLOCK 
------------------------ 
2016-09-22 13:05:09 0x7f3f427e0700 
*** (1) TRANSACTION: 
TRANSACTION 39420432534, ACTIVE 0 sec inserting 
mysql tables in use 1, locked 1 
LOCK WAIT 3 lock struct(s), heap size 1136, 2 row lock(s), undo log entries 1 
MySQL thread id 37503, OS thread handle 139917976340224, query id 1695822465 

挿入クエリ..

*** (1) WAITING FOR THIS LOCK TO BE GRANTED: 
RECORD LOCKS space id 1334 page no 1726952 n bits 312 index id of table `database_name`.`table_name` trx id 39420432534 lock_mode X insert intention waiting 
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0 
0: len 8; hex 73757072656d756d; asc supremum;; 

*** (2) TRANSACTION: 
TRANSACTION 39420432524, ACTIVE 0 sec inserting 
mysql tables in use 1, locked 1 
6 lock struct(s), heap size 1136, 5 row lock(s), undo log entries 1 
MySQL thread id 37494, OS thread handle 139909675222784, query id 1695822438 

別のINSERTクエリ...私は同様の問題を経験した

*** (2) HOLDS THE LOCK(S): 
RECORD LOCKS space id 1334 page no 1726952 n bits 312 index id of table 


*** (2) WAITING FOR THIS LOCK TO BE GRANTED: 
RECORD LOCKS space id 1334 page no 1726952 n bits 312 index id of table 

Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0 
0: len 8; hex 73757072656d756d; asc supremum;; 
+0

あなたのタイトルは、1)あなたが最近5.7にアップグレードすることを暗示しているようだ、と2)あなたは前にこれらの問題を経験していません。それらが正しい場合は、あなたの質問に直接記載してください。他のポイントが真であるかどうかにかかわらず、実際のクエリと 'SHOW CREATE TABLE tablename'出力はどちらも傷つきません。 –

+0

ウィレムレンゼマとライアン・ヴィンセントに感謝します。私は質問に関連する詳細をいくつか追加しました。助けてください。 – Rahul

答えて

0

: は以下ログです。 5.7以降、新しいパラメータ名があります。innodb_deadlock_detect

このオプションは、デッドロック検出を無効にするために使用します。高い同時実行 システムでは、デッドロックの検出は、多数のスレッドが同じロックを待機 景気減速を引き起こす可能性があります。時には、 デッドロックの検出を無効にして、デッドロックが発生したときに、トランザクション・ロールバック を設定innodb_lock_wait_timeoutに依存する方が効率的かもしれません。それはあなたのパフォーマンスを改善し、デッドロックの問題を減らすことができる無効

関連する問題