遇到 MySQL 的「deadlock wait timeout exceeded」,可以參考「Lock wait timeout exceeded; try restarting transaction」的說明。
尚未找到造成此問題的 query,暫時的解決辦法是:
- 暫時先將
innodb_lock_wait_timeout
的值調大 (注意:不是wait_timeout
這個參數) - 記錄導致 transaction 花掉太多時間的 query
long_query_time = 10
log_queries_not_using_indexes
記錄沒有使用到 index 的 query (這類 query 可能導致 table scan 而花掉超多的時間)
在蒐集 log 的期間,可以先去看一下 table schema,看看是不是有哪一些 column 或 combined index 怪怪的,跑 EXPLAIN
確定一下 index 是不是真的有用到