現象記述
TDSQL-C for MySQLでメモリ急増が発生し、メモリが増加し続け解放されない状況が確認されました。具体的には、インスタンス監視のメモリ使用率モニタリンググラフに下図の通り表示されます。
説明:
監視アラームページでインスタンスのメモリ使用率を確認できます。
急増後、または長期的な緩やかな増加プロセスにおいて、最終的に過度なレベル(>96%)に達し、一定範囲内で小幅に変動する場合、カスタム定義されたTCOPメモリアラームが頻繁にトリガーされる可能性があります。
障害リスク
非効率なSQL文やデータベースパラメータ設定の不備は、メモリ使用率の上昇を招く可能性があります。突発的なビジネスピークが発生した場合、クラウドデータベースのメモリOOM(Out Of Memory)を引き起こす恐れがあります。クラウドデータベースがOOMにより利用不能となった場合、マスター/スタンバイ切り替えがトリガーされ、切り替えプロセス中は一時的にサービスが利用できなくなります。通常、インスタンスの利用不能時間は60秒を超えません。ただし、ビジネスピーク時に切り替えが発生した場合、サービスの安定性と継続性に深刻な影響を与える可能性があります。
解決の考え方
TDSQL-C for MySQLのメモリは、グローバルレベルの共有メモリとセッションレベルのプライベートメモリの2つに大別されます:
共有メモリは、インスタンス作成時に割り当てられるメモリ空間であり、すべての接続で共有されるものです。
プライベートメモリは、TDSQL-C for MySQLサーバーに接続する各セッションごとに割り当てられるキャッシュです。
特殊なSQL文やフィールドタイプによっては、単一スレッドが複数回キャッシュを割り当てる可能性があるため、OOM異常が発生した場合、その原因は各接続のプライベートメモリに起因します。データベースの接続数制限や非効率なSQLの最適化により、メモリ使用率過多のリスクを低減できます。TDSQL-C for MySQLのメモリ使用率が依然として高い場合、メモリ構成のアップグレードによりデータベース全体の並行処理能力と安定性を向上させることができます。
処理手順
1. スローSQLを最適化し、セッションレベルのプライベートメモリ使用量を削減します。DBbrainでスローSQLの分析を行うことが可能です。 2. 無効な長期間接続を削減し、ビジネスに影響を与えずに、プログラム側のコネクションプール設定または並行度を低減します。DBbrainで現在のセッション情報を確認することが可能です。 3. メモリ使用状況の監視(オプション):performance_schemaのメモリモニタリング機能を有効にするには、まずperformance_schemaを有効化した後、performance_schemaデータベース内で名前がmemory_summaryで始まるテーブルを確認することでメモリ使用状況を把握できます。例えば、グローバル次元のメモリ使用率分析テーブル:memory_summary_global_by_event_name。
説明:
アップグレードプロセス中はビジネスの正常な使用に影響を与えず、アップグレード完了後に切り替えが行われます。秒単位の瞬断が発生する可能性があるため、ビジネスに再接続メカニズムが備わっていることをご確認ください。
メモリやCPUリソース不足によるビジネス運用への影響を避けるため、本番環境インスタンスに適切なリソースアラームポリシーを設定してください。これによりリソース不足のリスクを事前に検知できます。詳細は監視指標アラームを参照してください。