2013-07-09 9 views
8

私のコードはちょっと混乱していますが、どこに問題があるのか​​わかりませんが、トランザクションやテーブルロックを使わずにデッドロックが発生しています。これに関するすべての情報が役に立ちます。トランザクションを持たないデッドロックをどのように持つことが可能ですか?

私はデッドロックを探しました。トランザクションを使用することによって、デッドロックを引き起こす唯一の方法と思われます。

Error Number: 1213 
Deadlock found when trying to get lock; try restarting transaction 
UPDATE `x__cf_request` SET `contact_success` = 1, `se_engine_id` = 0, `is_fresh` = 1 WHERE `id` = '28488' 

編集:なぜdownvotesですか?それは有効な質問です。それが不可能ならば、他の人がこの問題に遭遇したときにそれを見ることができるように、理由だけを言います。

+0

とする必要があります。私は似たような問題を抱えています。あなたの質問は私が答えを必要としている最も近いものです...これを解決したかどうか私たちにお知らせください! –

答えて

1

InnoDBでは、各ステートメントは変換で実行されます。 BEGINとautocommit = 0は、複数ステートメントのトランザクションに使用されます。これを言っても、デッドロックはさまざまなトランザクション間で発生します。

idフィールドにインデックスがないか、複数のレコードに同じidがあるようです。もしそうでなければ、あなたはインデックスギャップロックを適所に持っているよりも。さらに診断するには、出力をSHOW ENGINE InnoDB STATUS

関連する問題