Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Amazon RDS for SQL Server インスタンスの CPU 使用率が高い場合のトラブルシューティング方法を教えてください。
Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server DB インスタンスにおいて、CPU 使用率が増加しています。
簡単な説明
次の要因で CPU 使用率が上昇する可能性があります。
- ユーザーが負荷の高いワークロード、複数の同時クエリ、または長時間実行されるトランザクションを開始した場合
- ワークロードに対するプロビジョニングが不十分なインスタンスクラスを使用した場合
- 統計情報が古く、インデックスの断片化やインデックスの欠落が起こった場合
- クエリに改善の余地がある場合
- ブロックとデッドロック
- 並列処理
- 頻繁なコンパイルと再コンパイル
- パラメータスニッフィング
- スレッドの枯渇
Amazon RDS for SQL Server インスタンスの CPU 使用率が高い原因を特定するには、次のツールを使用してください。
- Amazon CloudWatch metrics for Amazon RDS
- 拡張モニタリング
- Performance Insights
- Database Insights
- SQL Server ツール
原因を特定した後、ワークロードを分析して最適化し、CPU 使用率の増加を緩和します。
解決策
Amazon RDS の CloudWatch メトリクス
Amazon RDS 用 CloudWatch メトリクスを参照すると、長期間にわたり CPU パターンを識別できます。
ワークロードによって CPU 使用率が増加する期間を特定するには、次の手順を実行します。
- Amazon RDS コンソールを開きます。
- ナビゲーションペインで [データベース] を選択し、監視するデータベースを選択します。
- [モニタリング] タブを選択します。
- [モニタリング] メニューを選択し、[CloudWatch] を選択します。
- 次の CloudWatch メトリクスを検索し、グラフを比較します。
WriteIOPs
ReadIOPs
ReadThroughput
WriteThroughput
CPUUtilization
CPUCreditBalance
CPUCreditUsage
注: CPU クレジットバランスが絶えず減少し、CPU クレジットの使用量が常に増加している場合、CPU コアがそのワークロードには不十分です。t2 または t3 インスタンスクラスのインスタンスを使用する場合は、インスタンスがプロビジョニング不足かどうかを確認してください。
期間を特定した後、拡張モニタリングを使用して DB インスタンスに関連するデータをより詳細に確認します。拡張モニタリングでは、1、5、10、15、30、または 60 秒間隔でデータを収集するように設定できます。
拡張モニタリング
拡張モニタリングで設定を行い、DB インスタンスで実行中のオペレーティングシステム (OS) を監視します。
拡張モニタリングで CPU 使用率を確認するには、次の手順を実行します。
- Amazon RDS コンソールを開きます。
- ナビゲーションペインで [データベース] を選択し、監視するデータベースを選択します。
- [モニタリング] タブを選択します。
- [モニタリング] メニューを選択し、[OS プロセスリスト] を選択します。
OS、RDS、SQL Server、または SQL Agent のプロセスが要因で CPU 使用率が増加しているかどうかを確認します。これらのプロセスが使用している CPU とメモリの割合も確認します。
コンソールを使用してパフォーマンスメトリクスを監視します。[モニタリング] タブで [モニタリング] メニューを選択し、[グラフの管理] を選択します。
CPU がユーザープロセスを実行しているか、カーネルを実行しているか、アイドル状態であるかを判断するには、CPU ユーザー、CPU システム、CPU アイドルのメトリクスに関するグラフを選択します。次に、ディスク I/O と物理デバイス I/O のメトリクスを選択します。これらのメトリクスには、毎秒の読み取り I/O、書き込み I/O、読み取り Kb、書き込み Kb が含まれます。使用可能なメモリ、SQL Server の合計メモリ、および合計メモリなどのメモリに関連するパラメータも取得できます。CPU がリソースを待つ時間が長くなると、CPU 使用率が高くなる可能性があるため、これらのメトリクスが参考になります。
詳細については、「RDS コンソールで OS のメトリクスを確認する」を参照してください。
Database Insights
CloudWatch Database Insights を使用すると、データベース負荷の主な要因や、インスタンスグループで実行されている個々の OS プロセスをトラブルシューティングできます。
デフォルトでは、Amazon RDS データベースでは Database Insights の標準モードが有効になっています。DB インスタンスの作成時または変更時に標準モードを有効にする方法については、「Amazon RDS で Database Insights の標準モードを有効にする」を参照してください。
注: 広範なアクセス許可を使用していない場合は、Database Insights に必要な IAM アクセス許可を付与したことを確認してください。詳細については、「CloudWatch Database Insights の開始方法」を参照してください。
Amazon RDS とインスタンスクラスのサポートに関する詳細については、「Database Insights での Amazon RDS DB エンジン、リージョン、インスタンスクラスのサポート」を参照してください。
Performance Insights
Performance Insights を有効にすると、データベース負荷の要因となっているクエリを特定できます。
次の手順を実行します。
- Performance Insights ダッシュボードにアクセスします。
- 分析する期間に対応する [Top SQL] タブを確認します。
- 最も時間がかかっているクエリを特定します。
- リソースを大量に消費するクエリと、この期間中に発生した待機イベントを確認します。多くの場合、CPU 使用率の増加に関連している待機イベントを次に示します。
SOS_SCHEDULER_YIELD は、別のスレッドを実行させるためにワーカースレッドが解放されたことを示します。待機回数が多く、待機時間が短いと、多くの場合クエリにより CPU がかかります。ワーカースレッドが解放されると、CPU バインドされたクエリの待ち時間が長くなる可能性があります。待機時間が長い場合は、ワークロードをレビューする必要があります。SOS_SCHEDULER_YIELD が多い場合は、CPU の負荷が問題の原因です。ワークロードの種類を確認し、追加の調整を行います。
CXPACKET と CXCONSUMER は並列処理に関連する待機イベントであり、通常は問題にはなりません。ただし、待機イベントが頻繁に発生し、パフォーマンスに影響している場合は、クエリをレビューしたうえで、並列処理のコストしきい値に適切な値を設定してください。SQL Server がパラメータグループで低コストの並列処理パラメータを選択していることを確認してください。クエリまたはインスタンスレベルで、最大並列の度合いを示す MAXDOP を 1 に増やすことも有効です。
ThreadPool はスレッドの枯渇を示しています。インスタンスクラスでこの問題を処理できる場合は、最大ワーカースレッドパラメータを増やしてください。ブロック、ワークロードの増加、または多数の並列クエリが原因でスレッドが過剰に使用されると、ThreadPool が待機することがあります。最大ワーカースレッド数パラメータに設定ミスがある場合も、ThreadPool の待機イベントが発生する可能性があります。
バッチリクエスト、SQL のコンパイル、および SQL の再コンパイルが発生しているかどうかをデータベースメトリクスで確認します。複数回コンパイルされているクエリがないか確認します。特定のバッチでクエリが頻繁に再コンパイルされているかどうかも確認してください。その場合は、クエリのコードで WITH RECOMPILE 句を使用していることが示唆されます。上記の両方の要因で、CPU 使用率が過剰になる可能性があります。
SQL Server ツール
SQL Server ツールを使用して CPU 使用率の増加をトラブルシューティングするには、次の操作を行います。
- 特定のクエリを分析して、CPU 使用率の増加、統計情報の更新、インデックスの欠落、パラメータスニッフィングが発生していないかどうかを確認します。詳細については、Microsoft のウェブサイトで「SQL Server での高 CPU 使用率の問題のトラブルシューティング」を参照してください。
- 実行プランにパフォーマンスの低いクエリがないか確認し、追加の調整を行います。詳細については、Microsoft のウェブサイトで「実際の実行プランの表示」を参照してください。
- クエリと拡張イベントを参考に、過剰なロック、ブロッキング、デッドロックに関する問題をトラブルシューティングします。詳細については、Microsoft のウェブサイトで「SQL Server でのブロックの問題を把握し、解決する」を参照してください。
注: RDS for SQL Server で拡張イベントを設定する際は、標準の方法では .xel ファイルを保存することはできません。 - SQL Server レポートを使用してワークロードを微調整します。詳細については、Microsoft のウェブサイトで「Performance Dashboard」を参照してください。
