オープンソースMySQLは、MySQL 8.0.28の各セッションにLOCK_thd_security_ctxロック (バグ #32320541) を導入しました。 ただし、SHOW PROCESSLISTステートメントを実行すると、ロックによってデッドロックが発生する可能性があります。 このトピックでは、デッドロックの問題の原因と関連する解決策について説明します。
関与するRDSインスタンス
MySQL 8.0を実行し、次のマイナーエンジンバージョンを実行するRDSインスタンス:
20220830
20221121
20221231
20230324
原因
デッドロックの問題の詳細については、「バグ #110494」をご参照ください。 次の項目は、問題の原因を簡単に説明します。
SHOW PROCESSLISTステートメントを実行すると、LOCK_thd_removeとLOCK_thd_security_ctxの順序でロックが発生します。COM_CHANGE_USERステートメントを実行すると、LOCK_thd_security_ctxとLOCK_statusの順序でロックが発生します。COM_STATISTICSまたはFLUSH STATUSステートメントを実行するか、パフォーマンスエージェント機能を有効にすると、LOCK_statusおよびLOCK_thd_removeの順序でロックが発生します。
上記の3つの条件が同時に満たされた場合、デッドロックはLOCK_thd_remove、LOCK_thd_security_ctx、LOCK_status、LOCK_thd_removeの順に発生します。
影響
LOCK_thd_removeおよびLOCK_statusロックは、RDSインスタンスに大きな影響を与えます。 次の項目は影響を説明します。
RDSインスタンスへの接続を閉じることはできません。 新しい接続が継続的に確立された場合、接続数が上限に達し、RDSインスタンスを接続できません。
SHOW GLOBAL STATUSなどのステートメントは実行できず、RDSインスタンスのモニタリングデータは収集できません。パフォーマンスエージェントはパフォーマンスデータの記録を停止し、監視データは失われます。
ソリューション
RDSインスタンスでデッドロックの問題が発生した場合、RDSインスタンスのマイナーエンジンバージョンを20230610以降に更新できます。 この更新により、SHOW PROCESSLISTステートメントの実行時にデッドロックが発生する可能性があるという問題が修正されました。 RDSインスタンスのマイナーエンジンバージョンを確認し、ビジネス要件に基づいてマイナーエンジンバージョンを更新することを推奨します。 詳細については、「マイナーエンジンバージョンの更新」をご参照ください。