Amazon CloudWatch メトリクスを使用して Aurora PostgreSQL のリソース使用状況を分析する - Amazon Aurora

Amazon CloudWatch メトリクスを使用して Aurora PostgreSQL のリソース使用状況を分析する

Aurora はメトリクスデータを 1 分間隔で CloudWatch に自動的に送信します。CloudWatch メトリクスを使用して Aurora PostgreSQL のリソース使用状況を分析することができます。メトリクスを使用して、ネットワークのスループットとネットワーク使用量を評価できます。

CloudWatch によるネットワークスループットの評価

システム使用量がインスタンスタイプのリソース限界に近づくと、処理が遅くなることがあります。CloudWatch の [Logs Insights] (ログのインサイト) を使用して、ストレージリソースの使用状況をモニタリングし、十分なリソースが使用可能であることを確認できます。必要に応じて、DB インスタンスをより大きなインスタンスクラスに変更できます。

Aurora ストレージの処理は、次の理由で遅くなることがあります。

  • クライアントと DB インスタンス間のネットワーク帯域幅が不十分です。

  • ストレージサブシステムへのネットワーク帯域幅が不十分です。

  • ご使用のインスタンスタイプでは大きいワークロード。

CloudWatch の [Logs Insights] (ログのインサイト) にクエリを実行して、Aurora ストレージリソースの使用状況のグラフを生成し、リソースを監視できます。グラフには CPU 使用率とメトリクスが表示され、より大きなインスタンスサイズにスケールアップするかどうかの判断に役立ちます。CloudWatch [Logs Insights] (ログのインサイト) のクエリ構文の詳細については、「CloudWatch Logs Insights クエリ構文」を参照してください。

CloudWatch を使用するには、Aurora PostgreSQL ログファイルを CloudWatch にエクスポートする必要があります。既存のクラスターを変更して、ログを CloudWatch にエクスポートすることもできます。 ログを CloudWatch にエクスポートする方法については、「Amazon CloudWatch にログを発行するオプションをオンにする」を参照してください。

CloudWatch [Logs Insights] (ログのインサイト) にクエリを実行するには、DB インスタンスの [Resource ID] (リソース ID) が必要です。[Resource ID] (リソース ID) は、コンソールの [Configuration] (設定) タブで確認できます。

Aurora コンソールの設定タブのリソース ID。
ログファイルにリソースストレージメトリクスを照会するには:
  1. CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/) を開きます。

    CloudWatch 概要のホームページが表示されます。

  2. 必要に応じて AWS リージョン を変更します。ナビゲーションバーで、AWS リソースがある AWS リージョン を選択します。詳細については、「 リージョンとエンドポイント」を参照してください。

  3. ナビゲーションペインで、[Logs] (ログ)、[Logs Insights] (ログのインサイト) の順に選択します。

    [Logs Insights] (ログのインサイト) ページが表示されます。

  4. ドロップダウンリストから、分析するログファイルを選択します。

  5. フィールドに次のクエリを入力します。<resource ID> を DB クラスターのリソース ID に置き換えてください。

    filter @logStream = <resource ID> | parse @message "\"Aurora Storage Daemon\"*memoryUsedPc\":*,\"cpuUsedPc\":*," as a,memoryUsedPc,cpuUsedPc | display memoryUsedPc,cpuUsedPc #| stats avg(xcpu) as avgCpu by bin(5m) | limit 10000

  6. [Run query] (クエリを実行) をクリックします。

    ストレージ使用率グラフが表示されます。

    次の画像は、[Logs Insights] (ログのインサイト) ページとグラフ表示を示しています。

    Logs Insights ページとグラフ表示。

CloudWatch メトリクスで DB インスタンスの使用状況を評価する

CloudWatch メトリクスを使用して、インスタンスのスループットを監視し、インスタンスクラスがアプリケーションに十分なリソースを提供しているかどうかを確認できます。DB インスタンスクラスの制限については、Aurora 用の DB インスタンスクラスのハードウェア仕様 に移動し、DB インスタンスクラスの仕様を確認して、ネットワークパフォーマンスを確認してください。

DB インスタンスの使用量がインスタンスクラスの限界に近い場合、パフォーマンスが低下し始める可能性があります。CloudWatch メトリクスによってこの状況を確認できるので、より大きなインスタンスクラスへの手動スケールアップを計画できます。

以下の CloudWatch メトリクス値を組み合わせて、インスタンスクラスの限界に近づいているかどうかを確認します。

  • NetworkThroughput - Aurora DB クラスター内の各インスタンスについて、各クライアントによって送受信されたネットワークスループットの量。このスループット値には、DB クラスターとクラスターボリューム内のインスタンス間のネットワークトラフィックは含まれません。

  • StorageNetworkThroughput – Aurora DB クラスター内の各インスタンスによって Aurora ストレージサブシステムとの間で送受信されたネットワークスループットの量。

NetworkThroughputStorageNetworkThroughput に加えると、Aurora DB クラスター内の各インスタンスによって Aurora ストレージサブシステムとの間で送受信されたネットワークスループットになります。インスタンスのインスタンスクラス限界は、この 2 つのメトリクスの合計よりも大きい必要があります。

以下のメトリクスを使用して、送受信時のクライアントアプリケーションからのネットワークトラフィックの詳細を確認できます。

  • NetworkReceiveThroughput – Aurora PostgreSQL DB クラスター内の各インスタンスがクライアントから受信したネットワークスループットの量。 DB クラスターとクラスターボリューム内のインスタンス間のネットワークトラフィックは、このスループットに含まれません。

  • NetworkTransmitThroughput – Aurora DB クラスター内の各インスタンスが各クライアントに送信したネットワークスループットの量。 DB クラスターとクラスターボリューム内のインスタンス間のネットワークトラフィックは、このスループットに含まれません。

  • StorageNetworkReceiveThroughput – DB クラスター内の各インスタンスが Aurora ストレージサブシステムから受信したネットワークスループットの量。

  • StorageNetworkTransmitThroughput – DB クラスター内の各インスタンスが Aurora ストレージサブシステムに送信したネットワークスループットの量。

これらすべてのメトリクスを合計して、ネットワーク使用量とインスタンスクラスの限界との比較を評価します。インスタンスクラス限界は、これらのメトリクスの合計よりも大きい必要があります。

ネットワーク限界とストレージの CPU 使用率は相互に関係しています。ネットワークのスループットが増加すると、CPU 使用率も増加します。CPU とネットワークの使用状況を監視すると、リソースがどのくらい枯渇しているのか、またなぜ枯渇しているのかについての情報が得られます。

ネットワークの使用量を最小限に抑えるには、次のことを検討してください。

  • より大きなインスタンスクラスを使用します。

  • pg_partman パーティショニング戦略を使用します。

  • 書き込みリクエストをバッチに分割して、トランザクション全体を減らします。

  • 読み取り専用ワークロードを読み取り専用インスタンスに転送します。

  • 未使用のインデックスをすべて削除します。

  • 膨張したオブジェクトと VACUUM をチェックします。膨張がひどい場合は、PostgreSQL 拡張機能 pg_repack を使用します。pg_repack の詳細については、「最小限のロックで PostgreSQL データベース内のテーブルを再編成する」を参照してください。