Amazon Aurora PostgreSQLのパフォーマンスを引き出すためのCloudWatch Database Insights活用
はじめに
こんにちは。株式会社IVRyでSREをやっている渡部です。前職ではMySQLをやっていたのですがIVRyに来てからは専らPostgreSQLで色々な違いを楽しみながら学んでいます。
本記事では、Amazon Aurora PostgreSQLのパフォーマンスをより引き出すための監視ツール、Amazon CloudWatch Database Insightsについてご紹介します。
概要
Amazon Aurora PostgreSQLは、高性能でスケーラブルなリレーショナルデータベースサービスとして多くの企業に利用されています。しかし、そのパフォーマンスを最適化し、問題を迅速に特定するためには、適切な監視と分析が不可欠です。そこで役立つのが、Amazon CloudWatch Database Insightsです。本記事では、このツールを使用してAurora PostgreSQLのパフォーマンスを監視・分析する方法を紹介します。
CloudWatch Database Insightsとは?
Amazon CloudWatch Database Insightsは、2024年12月に発表された新しいサービスでデータベースのパフォーマンスメトリクスを可視化し、問題の特定とトラブルシューティングを支援する強力なツールです。特にAurora PostgreSQLとの統合により、以下のような機能を提供します。
- SQLレベルでのクエリパフォーマンス分析
- データベース負荷のトレンド可視化
- リソースのボトルネック特定
- 自動アラート設定による迅速な対応
- クエリの実行計画の確認(MySQL版は現時点では未対応)
CloudWatch Database Insights は Performance Insight、CloudWatch Logsといったこれまで使えていた機能を統合したものとなっています。(Performance InsightはPerformance Insightでこれまで通りの動線で画面遷移して使うこともできます)
パフォーマンス分析の実践
1. クエリパフォーマンスの可視化
CloudWatch Database InsightsからPerformance Insightを使うことができます。Performance Insight使うことで、実行されたSQLクエリのパフォーマンスを詳細に分析できます。
- Top SQL: 最も負荷の高いクエリを特定し、改善点を見つけることができます。
- Wait Events: データベースがどのリソース待ちで遅延しているのかを確認できます。
下記の画面からクエリ単位の具体的な行ロックの情報やDiskIOの分析を行うことができます。目安としてはAAS=平均アクティブセッション(※)数がvCPUを上回っていないことが理想の状態でその状態をキープできるようにキャパシティプランニングを行っています。
※ 平均アクティブセッションとは、特定の時間内において処理中または処理待ちのセッション数を示す指標です。この数値が高いほど、データベースへの負荷が大きいことを意味します。
こちらの機能ですが7日間分のパフォーマンスデータ履歴は無料で使えますがIVRyでは過去の経過も参照したいケースがあり30日分まで残すように設定しています。
2. メトリクスの監視
以下のような主要メトリクスを監視することで、Aurora PostgreSQLの状態を把握できます。
DB Load: データベースにかかる総負荷
Performance Insightsと同等の内容をDatabase Insightsからも確認することができます。データベース単位、セッション、アプリケーション、接続ユーザー単位での負荷量について分析を行えます。
基本的なメトリクス
DBの運用において必須と言えるCPU、メモリ、Diskといった基本的なメトリクスも同様に確認することができます。
PostgreSQLのアプリケーションレベルのメトリクス
基本的なメトリクスに加えて「秒間の実行クエリ数」「進行中のトランザクション」「デッドロック数」といったPostgreSQLのアプリケーションレベルのメトリクスも確認することができます。
3. アラートの設定
CloudWatchのアラート機能を使えば、異常な動作が発生した際に即座に通知を受け取ることが可能です。
- CloudWatchコンソールでアラームを作成します。
- メトリクスを選択し、しきい値を設定します(例: CPU使用率80%以上)。
- 通知先としてSNSトピックを設定し、メールやSlackでアラートを受け取ります。
4. スロークエリ分析
log_min_duration_statement
で設定したスロークエリの時間をもとにそれ以上実行時間がかかっているクエリをスロークエリのパターン別でみることができます。この画面では実行された回数、平均実行時間、p50、p95、最大実行時間を確認することができます。回数と平均実行時間が長いクエリから優先的に改善させることでより効率よく改善を進めるといった戦略を取ることもできます。
5. 実行計画の確認
2024年12月のアップデートにより、Amazon Aurora for PostgreSQLでも実行計画(EXPLAIN )の確認がCloudWatch Database Insightsから直接可能になりました。これにより、クエリのパフォーマンス問題を特定する作業が格段に効率化され、日常的な運用の中でのチューニング精度も向上します。
実行計画の確認方法
CloudWatch Database Insightsのダッシュボードから、負荷の高いクエリ(Top SQL)を選択すると、実行計画の詳細を即座に確認できます。これにより、次のような情報を視覚的に把握できます。
- スキャン方法(シーケンシャルスキャン、インデックススキャンなど)
- 実行時間の内訳
- 行の取得数やフィルタ条件の適用状況
- コスト予測と実際の差異の確認
有効化するためにはaurora_compute_plan_id
をonにする必要があります。
また実行中のクエリの実行計画を取得することもできます。数時間とか実行されるクエリがどういった実行計画で実行されているのかを確認することができます。
SELECT state, query_start, activity.query, explain_plan
FROM aurora_stat_activity() activity
JOIN aurora_stat_plans(true) plans ON (activity.plan_id = plans.planid)
LIMIT 1;
実際の運用での活用例
以下それぞれのケースでは実際にPostgreSQLへの接続なく分析を行うことができています。
ケーススタディ1: クエリ最適化によるレスポンスタイムの改善
あるECサイトでは、ページ読み込み速度の低下が問題となっていました。CloudWatch Database Insightsを使用して調査した結果、特定のJOINクエリが大量のデータを読み込んでいることが判明しました。このクエリを最適化し、インデックスを追加することで、レスポンスタイムを大幅に改善できました。
ケーススタディ2: リソースボトルネックの特定
DDLがタイムアウトして失敗する事象が発生しました。アプリケーションのログにはタイムアウトに関する情報しか記録されていなかったため、原因の特定が難しい状況でした。
しかし、Database Insightsを確認したところ、以下の点が明らかになりました。
- CPU使用率が急上昇していた
- ロック待ち状態のDMLが大量に発生していた
- 同時に実行されていたクエリの中に、DDLが並列実行されているものがあった
これらの状況から、DDL実行時の仕組みにバグがあり、意図せず並列でDDLが実行されていたことが原因と判明しました。Database Insightsのおかげで、どのDDLが実行され、どのDMLの実行時間が延びていたのかを特定することができ、結果として処理の改善につなげることができました。
まとめ
CloudWatch Database Insightsは、Aurora PostgreSQLのパフォーマンス監視と最適化において非常に有用なツールです。定期的なモニタリングと適切なアラート設定を行うことで、パフォーマンスの問題を未然に防ぎ、迅速なトラブルシューティングが可能になります。これにより、安定したシステム運用とエンドユーザーの満足度向上に貢献できます。
今後も新しい機能の追加や、他のAWSサービスとの連携を活用しながら、さらに高度な監視体制を構築していきたいと思います。
またこの記事を書いてる途中でもlock contention diagnosticsがリリースされるなど、この分野の機能追加は非常に速いペースで進んでいます。こちらの機能も早速触ってみましたがトランザクションのロック状況などをDatabase Insightsから見ることが大変便利そうです。今後も引き続き、こうしたアップデートを追いかけていくつもりです。
参考記事
その他
Discussion