すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:ApsaraDB RDS for SQL ServerインスタンスのCPU使用率が高くなる問題のトラブルシューティング

最終更新日:Jan 23, 2024

このトピックでは、CPU使用率を表示し、ApsaraDB RDS for SQL ServerインスタンスのCPU使用率が高くなる問題をトラブルシューティングする方法について説明します。 CPU使用率が高いと、クエリのパフォーマンスに影響する場合があります。

CPU使用率の表示

次のいずれかの機能を使用して、ApsaraDB RDSコンソールでRDSインスタンスのCPU使用率を表示できます。

  • モニタリングとアラート

    [モニタリングとアラート] ページに移動します。 [レガシーモニタリング] タブをクリックします。 次に、[リソースモニタリング] をクリックし、RDSインスタンスのCPU使用率を表示します。

    监控

  • 自律サービス

    RDSインスタンスは、クラウドディスクでSQL Server 2008 R2を実行しません。

    左側のナビゲーションウィンドウで、自律型サービス (CloudDBA) > 性能を最適化する を選択します。 表示されるページの パフォーマンスインサイト タブで、RDSインスタンスのCPU使用率を表示します。

    CloudDBA

説明

共有インスタンスファミリーは、CPUリソースの再利用をサポートします。 共有インスタンスファミリーを選択すると、インスタンスのCPU使用率が高くない場合でも、CPUリソースの再利用によりRDSインスタンスのパフォーマンスが制限される場合があります。 そのため、専用インスタンスファミリーまたは専用ホストインスタンスファミリーを選択することを推奨します。 これにより、RDSインスタンスの安定した高性能を確保できます。 共有インスタンスファミリーの詳細については、「インスタンスファミリー」をご参照ください。

CPUメトリックの分析

  • 原因

    ほとんどの場合、CPU使用率の急激な増加は、次の問題が原因です。

    • クエリ要求の数が突然増加します。 たとえば、クエリ要求の数は、ワークロードの突然の増加や、データキャッシングレイヤーでのキャッシュの浸透によって増加します。

    • クエリ要求のCPUオーバーヘッドが突然増加します。 たとえば、非効率的なメソッドを使用して新しいクエリ要求を処理したり、一部のクエリ文の実行プランが変更されたりすると、CPUオーバーヘッドが増加します。

    • システムがクエリ文の実行計画をコンパイルする頻度が大幅に増加します。 例えば、キャッシュへのプレッシャーが大きくなると、キャッシュされる実行プランの数やキャッシュヒット率が大幅に低下します。 この場合、システムがSQL文の実行計画をコンパイルする頻度が大幅に増加します。 その結果、RDSインスタンスの全体的なCPUオーバーヘッドが大幅に増加します。

  • 分析

    次のメトリックを分析して、CPU使用率の増加をトラブルシューティングします。

    • QPS

      QPSメトリックの値がCPU使用率と同じ速度で増加する場合、CPU使用率の増加はクエリ要求の数の増加によって引き起こされます。 つまり、CPU使用率の増加の理由はRDSインスタンスにはありません。 アプリケーションを分析して、CPU使用率の増加をトラブルシューティングする必要があります。

    • Page_Lookups /秒

      Page_Lookups/secメトリックは、クエリ要求を処理するために1秒あたりに論理的に読み取られるページの累積数を示します。 ほとんどの場合、システムが非効率的なメソッドを使用してクエリ文を実行するため、このメトリックの値は高くなります。 このメトリックの値が高い場合、クエリ要求のCPUオーバーヘッドは高くなります。 Page_Lookups/secメトリックの値がCPU使用率と同じ速度で増加しても、QPSメトリックの値が比較的安定している場合、クエリ文のCPUオーバーヘッドが増加します。 この場合、CPU使用率の増加に寄与するクエリ文の種類を特定する必要があります。 次に、これらのタイプのクエリ文を最適化して、CPU使用率を下げることができます。

    • Sqlcompliations

      SqIncompliationsメトリックは、クエリ要求の1秒あたりのコンパイル操作の数を示します。 このメトリックの値がCPU使用率と同じ速度で増加するが、QPSメトリックの値が比較的安定している場合、CPU使用率の増加は、クエリ要求の実行プランをコンパイルするために必要なCPUオーバーヘッドによって引き起こされる可能性があります。 さらに、キャッシュされている実行プランの数に関連するCache_Object_CountsおよびCache_Pagesメトリックを確認できます。 これらのメトリックの値が大幅に減少する場合、CPU使用率の増加は、キャッシュに対する大幅に高い圧力によって引き起こされる可能性があります。 このような場合、効果的な解決策は、RDSインスタンスのメモリ容量を増やすことです。

  • Case

    次の図は、サンプルケースを示しています。

    案例

    CPU使用率の統計によると、CPU使用率の増加は09:10から09:20および09:30から09:40に発生します。 ただし、QPSメトリックの値は、これらの期間中は増加しません。 QPSメトリックの値は09:40以降に増加します。 したがって、CPU使用率の増加は、クエリ要求の数の増加によるものではない。

    これらの期間中、SqIncompliationsメトリックの値は増加せず、このメトリックの絶対値は低い。 したがって、CPU使用率の増加は、クエリ文の実行プランをコンパイルするために必要なCPUオーバーヘッドによるものではありません。

    これらの期間中、Page_Lookups/secメトリックの値はCPU使用率と同じ速度で増加します。 したがって、CPU利用率の増加は、これらの期間中にいくつかのクエリ要求を処理するために必要とされる高いCPUオーバーヘッドによって引き起こされ得る。

    これらの期間に高いCPUオーバーヘッドを必要とするクエリ文を特定する必要があります。 さらに、Page_Lookups/secメトリックの値が増加すると、CPU使用率が増加します。 一部のクエリステートメントは、実行に高いCPUオーバーヘッドを必要とする場合があります。 ただし、これらのクエリステートメントは、論理読み取り操作に中程度のCPUオーバーヘッドを必要とする場合があります。 したがって、これらの期間中に実行されるクエリ文を分析して、CPU使用率の増加をトラブルシューティングする必要があります。.

アクティブセッションの分析

  • 原因

    CPU使用率が急激に増加する最も一般的な原因は、クエリ文の実行に使用されるメソッドの非効率性です。 自律性サービスの平均アクティブセッション (AAS) メトリックを使用して、非効率的なメソッドを使用して実行されるクエリ文を特定および分析できます。

  • 分析

    システムは10秒ごとにアクティブなセッションをチェックし、アクティブなクエリ要求のSQL文、クエリハッシュ値、実行計画、および待機イベントを記録します。 ほとんどの場合、高いCPUオーバーヘッドを必要とするクエリ文が実行されている場合、[待機] タブのクエリ文の [待機カテゴリ] 列の値はCPUです。

    [SQL] タブの [SQLハッシュ] 列には、パラメーターに基づいてSQL文が構造化された後に生成されるハッシュ値が表示されます。 ハッシュ値は、同一の構造を有するSQL文をマークするために使用される。 このように、システムは、SQL文の構造に基づいてSQL文を分類し、集約することができる。 SQL文のquery_hash列の値に基づいて、sys.dm_exec_query_statsシステムビューからSQL文の最新の統計を照会できます。

    次の操作を実行することを推奨します。

    • SQLタブの [SQLハッシュ] 列のハイパーリンクをクリックして、SQL文のAAS統計を表示します。

    • SQLタブの [実行計画] 列で [分析] をクリックし、SQL文の実行計画を表示します。 また、自律サービスによって生成される最適化の提案を表示することもできます。

    前述の最適化の提案は、単純な構造を持つSQL文に適しています。 RDSインスタンスのSQL文の構造が複雑な場合は、上記の最適化の提案に基づいて、これらのSQL文の実行計画をさらに分析してテストすることをお勧めします。

    AASメトリックの詳細については、「ApsaraDB RDS For SQL Serverインスタンスのパフォーマンスインサイト機能の使用」をご参照ください。

上位N個のSQL文を分析する

  • 原因

    自律性サービスのASSメトリックを使用して、特定の期間にCPU使用率の増加を引き起こすSQL文を特定できます。 この機能は、さまざまなSQL文の実行頻度、平均CPUオーバーヘッド、および全体的なCPUオーバーヘッドなどの情報を提供しません。 RDSインスタンスの全体的なCPUリソース効率を最適化する場合は、最もCPUリソースを消費するSQL文の詳細を取得することを推奨します。

  • 分析

    SQL Serverでは、SQL文やストアドプロシージャなど、さまざまなオブジェクトに関する情報を自動的に集計できます。 SQL Serverは、sys.dm_exec_query_statsやsys.dm_exec_procedure_statsなどのシステムビューも提供します。 システムビューからさまざまなオブジェクトに関する情報を照会できます。 次に、最も多くのリソースを消費するSQL文を特定できます。 リソースは、様々なタイプのものとすることができる。

    説明

    CloudDBAのTOP SQLレポートとTOPオブジェクトレポート、およびSQL Server Management Studio (SSMS) の上位N件のクエリレポートもシステムビューに基づいています。 これらのレポートは使いやすいですが、システムビューほど柔軟性がありません。

パラメーター設定の最適化

最大並列度 (MAXDOP) は、単一のクエリ要求で同時に使用できるアクティブなスレッドの最大数を制限するために使用されます。 アクティブなスレッドの数は、CPUコアの数を表します。 高いCPUオーバーヘッドを必要とするSQL文に対して、並列度の高い実行計画をコンパイルすると、これらのSQL文の実行に要する時間が大幅に短縮される可能性があります。 しかし、単位時間当たりのCPUオーバーヘッドは大幅に増加する。 したがって、次の提案に基づいて、クエリ速度とCPU使用率のバランスをとるために適切なMAXDOPを指定することを推奨します。

  • クエリ要求の同時実行性が高く、サポートされているSQL文のほとんどのCPUオーバーヘッドが低い場合は、MAXDOPを小さな値に設定します。 MAXDOPは1まで低くすることができ、これはゼロ度の並列度を指定する。

  • クエリ要求の同時実行性が低く、サポートされているSQL文の一部のCPUオーバーヘッドが高い場合は、MAXDOPを大きな値に設定します。 MAXDOPは、RDSインスタンスで使用可能なCPUコアの最大数の50% 25% を超えないようにすることを推奨します。

デフォルトのMAXDOPは2で、クエリ速度とCPUオーバーヘッドのバランスをとる中間値です。 sp_rds_configureストアドプロシージャを呼び出して、MAXDOPを再構成できます。 MAXDOPを再設定すると、RDSインスタンスを再起動することなく、新しい設定がすぐに有効になります。