私たちのデータベース(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
...
私が見つけた唯一の情報は:
スレッドは1つのコマンドを処理し、メモリを解放して特定の状態変数をリセットする準備をしています。
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接続を閉じていることを確認する必要があります。