2

デッドロックが原因で単純なクエリが失敗するという奇妙な問題に遭遇しました ここにクエリがあります

UPDATE myprobelmatictable SET  mycolumn = (mycolum-0)  WHERE id = '59' 

奇妙な問題は、私のphpサーバーがリモートネットワーク上の低速サーバーにある場合にのみ、このクエリが失敗することです

このクエリを実行する前に、次のことが起こります

transaction starts

insert new row in table 5

select 1 row from myproblematictable

insert new row in table 6

update table 4

UPDATE myprobelmatictable SET  mycolumn = (mycolum-0)  WHERE id = '<id>'

update table 3

Commit Transaction

奇妙なことに、同じクエリが毎回次のエラーで失敗します。

Error Number: 1213</p><p>Deadlock found when trying to get lock; try restarting transaction

innodb status コマンドは myproblematictable について言及していないようです

手がかりはありますか?

4

1 に答える 1

0

これは、別のクエリが別の順序でテーブルを更新した結果である可能性があります。テーブルを更新する順序が事前に決められているかどうかを確認し、そうであれば、更新の順序を書き直します。

そうでない場合は、問題のあるクエリを見つけて、それらがテーブルを更新している順序を確認することをお勧めします。どのタイプのテーブル エンジンを使用していますか? MyISAM はテーブル全体をロックすることに注意してください。

于 2013-09-03T18:12:41.813 に答える