Mysql
MySQL InnoDB 事務狀態中的“清理”是什麼意思以及如何防止它?
在我們的數據庫(RDS 上的 MySQL 5.6.22)中,我們有很多事務(~500)在負載下處於“清理”狀態:
> SHOW ENGINE innodb STATUS; ... ------------ TRANSACTIONS ------------ ... ---TRANSACTION 70150348714, not started MySQL thread id 132590, OS thread handle 0x2b2a712ca700, query id 10842420427 <ip> <user> cleaning up ...
我找到的唯一資訊是:
執行緒已經處理了一個命令並準備釋放記憶體並重置某些狀態變數。
https://dev.mysql.com/doc/refman/5.6/en/general-thread-states.html
這個問題評論提到:
如果您在實例中經常看到這種情況,您可能需要微調一些與記憶體相關的參數。
實際問題可能是什麼?為什麼這麼多交易處於“清理”狀態?我可以微調哪些記憶體參數來防止它?
任何建議將不勝感激。
引用這個人自己的話:
你好!
是的,如果您的 table_cache 太小,您可以讓程序處於“清理”狀態。
一般的答案是,如果狀態變數“opened_tables”隨著時間的推移會增加很多,則應該增加表記憶體。
你的,蒙蒂
資料來源:Grokbase.com
這可能是由應用程序未關閉的連接引起的。我觀察到一些打開的連接
SHOW ENGINE INNODB STATUS
報告“正在清理”,但SHOW FULL PROCESSLIST
將事務報告為睡眠狀態。我在 5.6 和 5.7 中看到了具有“清理”狀態的打開連接。
您應該檢查應用程序是否正在關閉其所有 MySQL 連接。