Mysql

MySQL InnoDB 事務狀態中的“清理”是什麼意思以及如何防止它?

  • January 30, 2019

在我們的數據庫(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 連接。

引用自:https://dba.stackexchange.com/questions/120584