Apache + PHP + MySQL で「Lock wait timeout exceeded; try restarting transaction」がでるときの対策。

Apache + PHP + MySQL で「Lock wait timeout exceeded; try restarting transaction」がでるときは、PDO::ATTR_PERSISTENTやmysql_pconnect等でコネクションプールをしている時のトランザクションに問題がある。

なので、MySQLの接続アカウントを更新用と参照用に分けて、参照用のみコネクションプールし、更新用はプールしないというのが単純で結構効果的な解決方法だと思う。

クエリの最適化で改善できればそれに超したことはないのは確かではあるけれど、影響範囲がでかかったりすると、そうそう手をつけられない場合があるので。


【参考URL】
・Lock wait timeout exceeded; try restarting transaction
http://www.mysqlpracticewiki.com/index.php/Lock_wait_timeout_exceeded;_try_restarting_transaction


トランザクションを強制的に終了させる
http://d.hatena.ne.jp/hhelibex/20110329/1301421815