Amazon Web Services ブログ
Amazon RDS for SQL Server の CPU 最適化機能の探索
Amazon Relational Database Service (Amazon RDS) for SQL Server が、CPU 最適化機能をサポートするようになりました。CPU 最適化機能を使用すると、新しいインスタンスを起動する際や既存のデータベースインスタンスを変更する際に、コア数を定義することができます。この機能は第 7 世代インスタンスクラスから利用可能です。以下のメリットがあります:
- RDS SQL Server インスタンスの vCPU 数をカスタマイズ
- 特定のワークロードに対して望ましいメモリ対 CPU 比を実現
- ライセンスコストを削減し、全体的なコスト管理においてさらなる柔軟性を獲得する可能性
この投稿では、Amazon RDS for SQL Server で CPU 最適化機能を使用する方法について説明します。内容は以下の通りです:
- CPU 最適化を設定して新しいインスタンスを作成する
- CPU 最適化で既存のインスタンスを変更する
- CPU 最適化で設定されたスナップショットから復元する
- CPU 最適化でポイントインタイムリカバリ (PITR) を実行する
前提条件
この投稿の例では、AWS Command Line Interface (AWS CLI) を使用します。RDS for SQL Server DB インスタンスの作成に関する基本的な知識があり、CPU アーキテクチャの概念 (コア、コアあたりのスレッド数、vCPU) を理解している必要があります。
また、CPU 最適化機能が Amazon RDS for SQL Server の料金と DB インスタンスのパフォーマンスの両方にどのような影響を与えるかについても理解しておく必要があります。
CPU 最適化された新しいインスタンスの作成
CPU 最適化機能を使用して RDS SQL Server インスタンスを作成するには、create-db-instance コマンドで --processor-features パラメータを使用します。coreCount と threadsPerCore の値を指定してください。次のコマンドは、8 コアで 1 コアあたり 1 スレッドのインスタンスを作成し、合計 8 個の vCPU になります。
このコマンドを使用する場合:
--processor-featuresパラメータには、coreCountとthreadsPerCoreの両方を指定することが必須です。- coreCount : インスタンスの CPU コア数をカスタマイズできます。選択したインスタンスタイプでコア数に許可されている値を確認するには、CPU 最適化をサポートする DB インスタンスクラスを参照してください。
- hreadsPerCore : コアあたりのスレッド数は、CPU コアあたりのスレッド数を定義するように設定されます。第 7 世代インスタンスクラスタイプ以降、CPU 最適化機能がサポートされており、第 7 世代インスタンスではハイパースレッディングが無効になっているため、コアあたりのスレッド数の許可値は 1 です。
--processor-featuresパラメータは、Amazon RDS for SQL Server に最低 4 vCPU が必要です。
これらの設定を確認するには、describe-db-instances コマンドを使用してください:
以下は、AWS Management Console での CPU 最適化機能の設定画面です。

注意 : ワークロードや RDS で自動化されたタスクに対してリソース制約を引き起こすことなく、設定された vCPU がワークロードを処理できるように、CPU 最適化機能を使用してワークロードのベンチマークを実行することをお勧めします。
CPU 最適化機能が有効になっている既存インスタンスの変更
–use-default-processor-features を使用したインスタンスの変更
CPU 最適化インスタンスをデフォルト設定に戻すには、--use-default-processor-features パラメータを使用します。
例えば、以下のコマンドは、db.r7i.8xlarge インスタンスタイプで 8 コア、1 スレッドのプロセッサ機能で設定されたインスタンス (rfs-test-ocpu-instance) を、そのデフォルト設定に変更します。
前の例では、8 コアで 1 コアあたり 1 スレッドの CPU 最適化設定で構成された既存の db.r7i.8xlarge インスタンスを、16 コアで 1 コアあたり 1 スレッドの db.r7i.8xlarge インスタンスタイプのデフォルト設定を使用するように変換されます。
マルチ AZ インスタンスの場合、プライマリインスタンスとセカンダリインスタンスの両方が、プロセッサ機能設定に従って同一の vCPU 構成を持ちます。
注意 : DB インスタンスを変更して CPU 最適化を設定する場合、インスタンスクラスタイプを変更する際と同じように短時間の DB インスタンスのダウンタイムが発生します
–processor-features を使用したインスタンスの変更
既存のインスタンスを変更して、プロセッサ機能設定を指定することができます。例えば、以下のコマンドは、db.r7i.8xlarge インスタンスタイプとデフォルト設定で構成されている既存のインスタンス (rfs-test-ocpu-instance) を、CPU 最適化のカスタム設定に変更します。
デフォルトでは、db.r7i.16xlarge インスタンスは 32 コアでコアあたり 1 スレッドをサポートし、合計 32 個の vCPU となります。指定された設定で CPU 最適化機能を利用すると、インスタンスは 8 コアでコアあたり 1 スレッドに変更され、合計 8 個の vCPU となります。
CPU 最適化が設定されたスナップショットからの復元
CPU 最適化が有効になっているインスタンスのスナップショットから復元する場合、デフォルトでは設定はターゲットインスタンスにコピーされます。復元プロセス中に異なる CPU 最適化設定を指定することもできます。
CPU 最適化機能を使用したスナップショットの復元
この例では、CPU 最適化設定で構成された既存のインスタンス (rfs-test-ocpu-instance) のスナップショットバックアップを使用しています。これは db.r7i.16xlarge インスタンスタイプを使用し、8 コアでコアあたり 1 スレッドの CPU 最適化設定により、合計 8 個の vCPU を実現しています。
スナップショットを作成するには、以下のコマンドを実行してください :
DB スナップショットの詳細を確認するには、次のコマンドを実行してください:
次のようなアウトプットを取得できます :
スナップショットから復元するには、次のコマンドを実行してください:
restore-db-instance-from-db-snapshot では、インスタンスタイプや CPU 最適化設定を指定しなかったため、Amazon RDS はスナップショットから同じインスタンスタイプ (db.r7i.16xlarge) と CPU 最適化設定 (8 コア、コアあたり 1 スレッド) でインスタンスを作成します。
スナップショット復元で CPU 最適化機能を使用するシナリオは複数あります。
スナップショットを異なるインスタンスタイプとデフォルトのプロセッサ機能に復元
CPU 最適化が有効になっているインスタンスで取得したスナップショットは、異なるインスタンスタイプと --use-default-processor-features を指定することで復元できます。
この例では、CPU 最適化設定で構成された既存のインスタンス (rfs-test-ocpu-instance) のスナップショットバックアップを使用しています。元のインスタンスは db.r7i.16xlarge インスタンスタイプを使用し、8 コアでコアあたり 1 スレッドの CPU 最適化設定により、合計 8 個の vCPU となっています。
以下のコマンドは、スナップショットを異なるインスタンスタイプ (db.r7i.8xlarge) にデフォルトの CPU 設定 (16 コア、コアあたり 1 スレッド) で復元します。
(無効) 異なるインスタンスタイプで、プロセッサ機能が設定されていない設定でのスナップショットの復元
CPU 最適化の設定をしたインスタンスから異なるインスタンスタイプにスナップショットを復元する際は、プロセッサ機能設定を省略することはできません。以下の例では、これを試行した場合に何が起こるかを示しています。
このシナリオでは、db.r7i.16xlarge、8 コア、コアあたり 1 スレッドで構成されたインスタンス (rds-test-ocpu-instance) から取得したスナップショットを、プロセッサ機能を指定せずに異なるインスタンスタイプ (db.r7i.8xlarge) に復元しています :
このコマンドは次のエラーで失敗します:
スナップショットでプロセッサ機能が有効になっており、復元時に異なるインスタンスタイプを指定する場合は、ProcessorFeatures 設定または UseDefaultProcessorFeatures オプションのいずれかを明示的に指定する必要があります。
カスタムプロセッサ機能を持つ異なるインスタンスタイプにスナップショットを復元する
例えば、以下のコマンドは、db.r7i.16xlarge インスタンスタイプを使用して CPU 最適化設定 (8 コア、コアあたり 1 スレッド) で構成されたインスタンス (rfs-test-ocpu-instance) のスナップショットを復元します。新しいインスタンスタイプ (db.r7i.12xlarge) と新しい CPU 最適化設定 (18 コア、コアあたり 1 スレッド) を指定しました。
CPU 最適化されたポイントインタイムリカバリ (PITR)
ポイントインタイムリカバリ (PITR) を使用すると、インスタンスを特定の時点に復元できます。このプロセスでは、PITR で指定された時刻に基づいて特定のスナップショットを復元し、その後そのスナップショットにすべてのトランザクションログバックアップを適用することで、インスタンスを指定された時点の状態にします。
PITR では、coreCount と threadsPerCore のプロセッサ機能設定は、PITR リクエスト時にカスタム値が指定されない限り、(その時点に設定されていた値ではなく) ソーススナップショットから取得されます。使用されているソーススナップショットで CPU 最適化が有効になっており、PITR で異なるインスタンスタイプを使用している場合は、ターゲットインスタンスの CPU 最適化オプションを定義するか、--use-default-processor-features オプションを指定する必要があります。上記のスナップショット復元で説明されたユースケースは、PITR にも適用されます。
TimeStamp-1 : CPU 最適化されたソースデータベースインスタンスの詳細
例えば、8 コアで 1 コアあたり 1 スレッドの CPU 最適化設定で db.r7i.8xlarge インスタンスタイプで実行されるインスタンス (rfs-test-ocpu-instance-8) があります。以下のコマンドはインスタンス設定を表示します。
次のような出力が得られます :
TimeStamp-2: データベーススナップショットの作成
データベースのスナップショットを作成するために、以下のコマンドを実行します。
データベーススナップショットの詳細を確認するために以下のコマンドを使用します:
次のような出力が得られます :
TimeStamp-3: インスタンスプロセッサ機能設定の変更
次に、以下のコマンドを実行して、インスタンスのプロセッサ機能設定を 4 コア、コアあたり 1 スレッドに変更します:
インスタンスの詳細を確認します :
次のような出力が得られます :
TimeStamp-4: 最新の復元可能時刻への PITR
次に、インスタンスを最新の復元可能時刻に復元します。
復元されたインスタンスに対して describe コマンドを実行します:
次のような出力が得られます :
ポイントインタイムリカバリ (PITR) の時点で、ソースインスタンスは db.r7i.8xlarge インスタンスタイプで実行されており、4 コア、コアあたり 1 スレッドの構成となっています。しかし、復元されたインスタンス (最新の復元可能時刻を使用) の CPU 設定は、8 コア、コアあたり 1 スレッドに設定されています。
クリーンアップ
RDS for SQL Server インスタンスが不要になった場合は、追加料金の発生を避けるために削除してください。
- RDS SQL Server DB インスタンスの削除
次のコマンドを使用します :
- 手動で取得した DB Snapshot の削除
次のコマンドを使用します :
結論
この投稿では、Amazon RDS for SQL Server の CPU 最適化機能を使用して vCPU 割り当てをカスタマイズし、特定のワークロードのコストを削減し、パフォーマンスを最適化する方法を実演しました。新しいインスタンスの作成、既存インスタンスの変更、CPU 最適化設定でのスナップショットからの復元とポイントインタイムリカバリについて説明しました。CPU リソースを微調整することで、アプリケーションが必要とするパフォーマンスを維持しながら、より良いコスト最適化を実現できます。
Amazon RDS for SQL Server とその機能の詳細については、Amazon RDS ユーザーガイドを参照してください。
翻訳はソリューションアーキテクトの Yoshinori Sawada が担当しました。原文はこちらです。