RDS for SQL Server インスタンスで CPU 使用率が高い場合のトラブルシューティング方法を教えてください。

最終更新日: 2022 年 10 月 4 日

Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server インスタンスで CPU 使用率が高くなっています。高い CPU 使用率をトラブルシューティングして解決するにはどうすればよいですか?

簡単な説明

CPU 使用率が上昇する一般的な理由は次のとおりです。

  • ユーザーが開始した負荷の高いワークロード、複数の同時クエリ、または長時間実行されるトランザクション
  • 過少にプロビジョニングされたインスタンスクラスをワークロードに使用すること
  • 古い統計、インデックスの断片化またはインデックスの欠落
  • 改善すべき余地があるクエリ
  • ブロックとデッドロック
  • 並列処理
  • 頻繁なコンパイルと再コンパイル
  • パラメータスニッフィング
  • スレッドの枯渇

Amazon RDS for SQL Server インスタンスの CPU 使用率上昇の原因を特定するには、次のツールを使用します。

  • Amazon CloudWatch metrics for Amazon RDS
  • 拡張モニタリング
  • Performance Insights
  • SQL Server ネイティブツール

送信元を特定したら、ワークロードを分析および最適化して、CPU 使用率を削減できます。

解決方法

Amazon CloudWatch metrics for Amazon RDS

CloudWatch メトリクスを使用して、長期間にわたる CPU パターンを識別できます。WriteIOPS、ReadIOPS、ReadThroughput、および WriteThroughput のグラフを CPU 使用率と比較して、ワークロードによって高い CPU が発生した時間を調べます。詳細については、「Amazon RDS の Amazon CloudWatch メトリクス」を参照してください。

T2 または T3 インスタンスクラスのインスタンスを使用している場合は、インスタンスが過少にプロビジョニングされていないか確認してください。CPU クレジット残高が継続的に減少し、CPU クレジットの使用量が継続的に増加している場合、CPU コアがワークロードに対して十分ではないということを示しています。

時間枠が特定されたら、DB インスタンスに関連付けられている拡張モニタリングを確認できます。1、5、10、15、30、または 60 秒の間隔でデータを収集するように拡張モニタリングを設定できます。これにより、CloudWatch よりも詳細なレベルでデータを収集できます。

拡張モニタリング

拡張モニタリングを設定している場合は、それを使用して DB インスタンスで実行されている OS をモニタリングできます。拡張モニタリングを使用して CPU 使用率を確認するには、次の操作を実行します。

  1. RDS コンソールで [データベース] を選択し、データベースを選択します。
  2. [モニタリング] タブのモニタリングドロップダウンメニューから [OS プロセスリスト] を選択します。使用率が高い CPU が OS、RDS プロセス、SQL Server プロセス、または SQL エージェントプロセスによって駆動されているかどうかを確認します。また、これらのプロセスが使用している CPU の割合とメモリの割合を確認することもできます。
  3. 拡張モニタリングドロップダウンリストからメトリックを選択し、パフォーマンスモニターのデータを確認します。これらのメトリックには、CPU アイドル、カーネル、ユーザーが含まれます。これらのメトリックは、CPU がほとんどの時間をアイドル状態に費やしているのか、カーネルを実行しているのかまたはユーザープロセスを実行中しているのかを示します。
  4. [グラフを管理] を選択すると、他のメトリックが表示されます。次に、I/O とディスクスループットに関連するメトリックを選択できます。これらのメトリックには、読み取り/秒、書き込み/秒、読み取り KB/秒、および書き込み KB/秒が含まれます。また、使用可能なメモリ、SQL Server メモリ、および合計メモリなどのメモリ関連のパラメータも表示できます。CPU がリソースの待機に多くの時間を費やしている場合、CPU 使用率が高くなる可能性があるため、これらのメトリクスは役に立ちます。

詳細については、「RDS コンソールでの OS メトリクスの表示」を参照してください。

    Performance Insights

    Amazon RDS Performance Insights を使用して、データベース負荷の原因となるクエリを特定できます。これを行うには、次の操作を実行します。

    1. 分析したい時間枠に対応する SQL タブを確認してください。
    2. 最も時間がかかっているクエリを特定します。
    3. リソースを大量に使用するクエリと、この期間中に発生した待機イベントを確認してください。CPU 使用率が高くなると頻繁に発生する待機イベントは次のとおりです。
      SOS_SCHEDULER_YIELD: この待機はあるワーカーを別のワーカーに譲ったことを示しています。待機数が多く待機時間が短い場合は、通常、クエリが CPU に依存していることを示します。ここで待機時間が長いのは、回転率の問題が原因である可能性があります。ここで待機時間が長い場合は、ワークロードをさらに確認する必要があります。
      SOS_SCHEDULER_YIELD がよく発生する待機のタイプである場合には、CPU の負荷が問題であることを示している可能性があります。ワークロードのタイプを確認し、追加のチューニングを行います。
      CXPACKET と CXCONSUMER: 並列処理関連の待機イベントは通常問題になりません。ただし、待機イベントが頻繁に発生してパフォーマンスに影響する場合は、クエリを確認し、並列処理のコストしきい値として適切な値を設定してください。SQL Server がパラメータグループ内の低コストの並列処理パラメータを選択していることを確認してください。
      ユースケースに応じて、クエリレベルまたはインスタンスレベルで MAXDOP (最大並列処理度) を 1 に増やすこともできます。
      ThreadPool: この待機イベントはスレッドの枯渇を示します。インスタンスクラスがそれを処理できる場合は、最大ワーカースレッドパラメータを増やしてください。スレッドプールの待機は、過剰なスレッドの使用が原因で発生する可能性があります。ブロック、高いワークロード、または多数の並列クエリが原因で、スレッドが過剰に使用されます。または、この待機は、最大ワーカースレッドパラメータの設定ミスが原因である可能性があります。
    4. バッチリクエスト、SQL コンパイル、SQL 再コンパイルについては、データベースメトリクスを確認してください。クエリが何度もコンパイルされているか、即時性のクエリを示しているかどうかを確認してください。また、クエリコードで with recompile が使用されていることを示しており、特定のバッチでクエリが頻繁に再コンパイルされるかどうかも確認します。どちらも CPU 使用率が高くなる原因となります。

    SQL Server ネイティブツール

    CPU のトラブルシューティングに関する特定のクエリ: 詳細については、Microsoft のドキュメント Web サイトの「SQL Server での高い CPU 使用率のトラブルシューティング」を参照してください。CPU 負荷の高いクエリ、統計の更新、インデックスの欠落、およびパラメータスニッフィングに注目します。

    実行計画にパフォーマンスの低いクエリがないか確認し、追加のチューニングを行います。 詳細については、Microsoft ドキュメント Web サイトの「実際の実行計画の表示」を参照してください。

    クエリと拡張イベントを使用して、過剰なロック、ブロック、デッドロック関連の問題をトラブルシューティングします。 詳細については、Microsoft のドキュメント Web サイトの「SQL Server のブロックに関する問題の理解と解決」を参照してください。

    注: RDS for SQL Server で拡張イベントを設定する場合、XEL ファイルの保存には通常の方法を使用できません。拡張イベントの設定方法については、「Amazon RDS for SQL Server で拡張イベントを設定する」を参照してください。

    SQL Server レポートを使用すると、SQL Server でネイティブに利用できるパフォーマンスレポートを取得できます。 これらのレポートを使用してワークロードをチューニングしてください。詳細については、Microsoft ドキュメント Web サイトの「パフォーマンスダッシュボード」を参照してください。


    この記事は役に立ちましたか?


    請求に関するサポートまたは技術サポートが必要ですか?