私は6スクリプト/タスクを持っています。それらの一つ一つは、ロールバックした後、MySQLデータベースからDELETE/SELECT/UPDATE/INSERTを意味し、その仕事を行う、MySQLのトランザクションを開始します。MySQL設定
データベースが、指定された状態Sである場合、タスクが終了したときので、私は、一つのタスクを起動し、データベースがバック状態にS.
私が順次スクリプトを起動すると、すべてが正常に動作している:
- 状態SにおけるDB
- タスク1
- DB状態Sにおける
- タスク2
- STにおけるDB状態S
でS
- DB同時に
- 6タスク
- 状態S
一部のタスクをランダムに失敗でDB、私は時々、このエラーが出る:
SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction
私は理解していない、私はトランザクションがそのためのものだと思った。私は行方不明のものがありますか?どんな経験、助言、手がかりも大歓迎です。
MySQLの設定は次のとおりです。
innodb_lock_wait_timeout = 500
transaction-isolation = SERIALIZABLE
と私は、各セッションの開始時にAUTOCOMMIT = 0を追加します。
PS:データベースが構築され、私がその後変更REPEATABLE READ分離レベルの下で使用しました。
いくつかのコードは、長い道のりを行くだろう。変数との同期の問題が発生しているようです。これは、あなたがコミットされていない/状態をロールバックにある変数/データベースの状態で問題が発生しているように聞こえる私の以前のコメントを明確にするために申し訳ありませんが、ロールバック状態にある取引など – Namphibian
である可能性があります。 – Namphibian
さて、関連する記事を読んだあと、それを行うのは正しい方法ではないようです。私は各スレッドごとに完全に分離されたデータを必要とするので、私の洞察はおそらく6つのミラーデータベースで動作することです。 – Joucks