2004-02-01

_How to Cope With Deadlocks

MySQLのマニュアルの一部ですが、 参考になったのでリンクしておきます。

仕事でZopeのバックエンドに MySQLを併用しているんですが、 時々デッドロックを起こしてるんで、 一体何が悪いんだろうって話になったのです。 Zopeでアダプターに使われている ZMySQLDA を私がいじってしまったので、 それが原因かとも考えたのですが、 どうもそうではないようです。 InnoDBがいつでもクソ真面目に行レベルロックするからなんですね。

マニュアルにいろいろ解決策が書かれていますが、 Zopeのように勝手にトランザクションを開始してしまうモデルだと、 適用できる方法が極めて限られてしまいます。 Zopeが本当にいいのか悩んでしまいますが、 InnoDB側もいまいちじゃないですかね。 「シリアライズするためのロック用テーブルを持つ」なんてダサい解決法を勧めるぐらいなら、 行レベルではなく、 テーブル単位のロックを行なう属性を持てるようにしてもらいたいものです。

[]