Amazon Web Services ブログ

Amazon RDS for SQL Server で CPU を最適化する設定

Amazon Relational Database Service (Amazon RDS) for SQL Server は、コア数変更設定によって vCPU 割り当てを制御でき CPU 最適化機能を提供するようになりました。SQL Server のライセンス費用は、特に十分に活用されていない vCPU に対して支払いを行っている場合、データベース予算の大部分を占める可能性があります。この投稿では、新規および既存の Amazon RDS インスタンスの両方において、パフォーマンスを維持しながらライセンス費用を削減する可能性がある CPU 最適化機能の実装方法を、パフォーマンスベンチマーク結果とコストへの影響とともに説明します。

ソリューション概要

AWS Management Console を使用してソリューションを実装したり、プロセスを自動化したりできます。SQL Server のパフォーマンスは通常、適切なインスタンスタイプの選択に依存し、メモリとストレージ (1 秒あたりの入出力操作数 (IOPS) とスループット) が重要な要素となります。オンライントランザクション処理 (OLTP) ワークロードは一般的に CPU 集約的というよりもメモリまたは I/O バウンドですが、CPU リソースを最適化することで、パフォーマンスを損なうことなくコスト効果を得ることができます。

この投稿では、新規および既存の RDS インスタンスに対する CPU 最適化の設定方法を実演し、パフォーマンスベンチマーク結果をお見せし、コストの影響を理解していただけるよう支援します。このソリューションでは、以下を行います:

  • 最適化された CPU 設定で新しい Amazon RDS インスタンスを作成
  • 既存インスタンスの変更
  • CPU 最適化を使用した復元操作の実行
  • 様々な設定でのパフォーマンステスト
  • コスト効果分析

以下の図は、ソリューションアーキテクチャを示しています。

Solution Diagram

前提条件

このソリューションを実装する前に、以下を確認してください:

このソリューションには、新しい AWS リソースの作成と利用が含まれます。そのため、お客様のアカウントに費用が発生します。詳細については、AWS 料金表をご参照ください。

本番環境にこのソリューションを実装する前に、本番環境以外の環境でこれを設定してエンドツーエンドの検証を実行することを強く推奨します。

CPU 最適化の実装

CPU を最適化する方法は 3 つあります。新しい RDS インスタンスを作成する、既存の RDS インスタンスを変更する、そしてインスタンスを復元する方法です。次のセクションでは、各オプションを実装するためのステップバイステップガイドを提供します。

オプション 1 : 新しい RDS インスタンスの作成

最適化された CPU 機能を持つ新しい RDS for SQL Server インスタンスを作成するには、以下の手順を実行してください:

  1. Amazon RDS コンソールで、データベースの作成を選択します。
  2. データベース作成方法を選択でフル設定を選択します。
  3. エンジンタイプとして Microsoft SQL Server を選択します。
  4. データベース管理タイプで、Amazon RDS を選択します。
  5. エディションを選択します。この投稿では、Enterprise Edition を選択します。
  6. サポートされている SQL Server バージョン を選択します。この投稿では、SQL Server 2022 の最新マイナーバージョンを選択します。
  7. テンプレートで 開発 / テスト を選択します。
  8. 設定で、DB インスタンス識別子とプライマリユーザーのプライマリユーザー名とパスワードを入力します。
  9. インスタンス設定で、標準クラスを選択し、希望するインスタンスクラスを選択します。この投稿では、db.m7i.8xlarge を選択します。
  10. CPU 最適化セクションで vCPU の数を設定にチェックを入れます。
  11. 希望するコア数を設定します。CPU 最適化をサポートする第 7 世代以降のインスタンスでは、ハイパースレッディングはデフォルトで無効になっています。

これらの設定は以下のスクリーンショットに示されています。

m7i8xlarge

  1. 接続設定で、EC2 コンピュートリソースに接続しない、IPv4 ネットワークタイプ、および作成した VPC とサブネットグループを選択します。
  2. パブリックアクセスには「いいえ」を選択します。
  3. VPC セキュリティグループでは、「既存の選択」を選び、作成したセキュリティグループを選択します。
  4. その他の設定はデフォルトのままにしておきます。
  5. 「データベースの作成」をクリックし、インスタンスがプロビジョニングされるまで待ちます。
  6. インスタンスが「利用可能」になったら、DB インスタンスの名前を選択します。設定タブを選択して、以下の画面ショットに示すように、vCPU 数、コア数、およびコアあたりのスレッド数の設定を確認することができます。

m7i8xlarge_post_creation

オプション 2 : 既存の Amazon RDS インスタンスの修正

次の AWS CLI コマンドを使用して、既存のインスタンスを変更して CPU 最適化設定を変更できます。

以下のコードは Windows 向けです:

aws rds modify-db-instance ^
     --db-instance-identifier <your DB identifier> ^
     --db-instance-class <instance class> ^
     --processor-features "Name=coreCount,Value=<X>" "Name=threadsPerCore,Value=1" --apply-immediately
Python

以下のコードは Mac 向けです:

aws rds modify-db-instance \
     --db-instance-identifier <your DB identifier> \
     --db-instance-class <instance class> \
     --processor-features "Name=coreCount,Value=<X>" "Name=threadsPerCore,Value=1" --apply-immediately
Python

Option 3 : インスタンスの復元

スナップショットからインスタンスを復元する際、以下の AWS CLI コマンドを使用して CPU 設定の最適化を構成できます。

ポイントインタイムリカバリー

以下のコードは Windows 向けです:

aws rds restore-db-instance-to-point-in-time ^
        --source-db-instance-identifier <your source DB identifier> ^
        --target-db-instance <target DB identifier> ^
        --db-instance-class <instance class> ^
        --use-latest-restorable-time ^
        --processor-features "Name=coreCount,Value=<X>" "Name=threadsPerCore,Value=1"
Python

以下のコードは Mac 向けです:

aws rds restore-db-instance-to-point-in-time \
        --source-db-instance-identifier <your source DB identifier> \
        --target-db-instance <target DB identifier> \
        --db-instance-class <instance class> \
        --use-latest-restorable-time \
        --processor-features "Name=coreCount,Value=<X>" "Name=threadsPerCore,Value=1"
Python

パフォーマンス設定

CPU 最適化がパフォーマンスにどのような影響を与えるかを理解していただくために、典型的な OLTP データベースワークロードをシミュレートするテストを実施しました。以下のコンポーネントを使用してテスト環境を構築しました:

  • インスタンス
    • SQL Server 2022 Enterprise Edition がインストールされた db.r7i.12xlarge RDS インスタンス
    • SQL Server 2022 Enterprise Edition がインストールされた db.r6i.12xlarge RDS インスタンス
    • SQL Server 2022 Enterprise Edition がインストールされた db.m6i.8xlarge RDS インスタンス
    • SQL Server 2022 Enterprise Edition がインストールされた db.m7i.8xlarge RDS インスタンス
  • ストレージ設定 – 64,000 IOPS をもつ 2 TiB io2 ストレージ
  • クライアントマシン – m6i.12xlarge インスタンス
  • テストツール – TPCC 類似ワークロードを使用した HammerDB

同期レプリケーションのレイテンシーを排除し、純粋なパフォーマンス指標に焦点を当てるために、シングル AZ デプロイメントを選択しました。テストデータベースは 8,000 のウェアハウスで構成され、I/O ワークロードシミュレーションを最大化するために「すべてのウェアハウスを使用」オプションを選択しています。

テスト手法

私たちのパフォーマンス評価では、HammerDB の Autopilot 機能を使用し、体系的なアプローチを実装しました:

  • パフォーマンスの停滞地点に達するまでの仮想ユーザーの段階的スケーリング
  • 様々な同時実行シナリオをテストするためのユーザー負荷の指数的増加
  • 統計的妥当性のための各テストシナリオの 3 回実行
  • 信頼性の高いパフォーマンス指標のための結果の平均化

この方法論を用いることで、私たちは以下のことができます:

  • 最大持続可能トランザクション率を特定
  • 様々な負荷条件下でのシステム動作を測定
  • 再現可能で信頼性の高いパフォーマンスベースラインを確立
  • パフォーマンステスト結果を通じて異なる RDS インスタンス間でのパフォーマンス一貫性を検証

仮想ユーザー数を 16、32、64、128、256、384、512、1024 と指数的に設定します。

db.r6i.12xlarge と db.r7i.12xlarge の比較テスト

我々は、48 vCPU (ハイパースレッディング有効で 24 コア) の r6i インスタンスクラスと、24 vCPU (ハイパースレッディング無効で 24 コア) との比較テストを開始しました。両方のインスタンスは最大 60,000 IOPS をサポートしています。以下の図はパフォーマンステストを表しています。r7i インスタンスクラスのパフォーマンスは、実際には 512 仮想ユーザーまでにおいて、r6i インスタンスクラスと比較してわずかに優れています。以下のグラフは、仮想ユーザー数を変化させたパフォーマンス比較を示しています。

r6i_vs_r7i

以下のグラフは、インスタンス間で取得された一連のテストの平均 CPU 使用率を表しています。r6i インスタンスは最大 CPU 使用率 20% を記録し、r7i インスタンスは 1024 の仮想ユーザーが同時にクエリを実行している際に 40% を示しました。40% は、ほとんどのデータベースインスタンスにとって快適な閾値です。

r6i_cpu

r7i_cpu

次の図は、テストがインスタンスクラスとサイズでサポートされている IOPS(60,000) を最大まで使用していることを示しています。サポートされているストレージ IOPS とスループットの詳細については、Amazon EBS 最適化インスタンスタイプをご覧ください。

r6i_iops

r7i_iops

db.m6i.8xlarge と db.m7i.8xlarge 比較テスト

32 vCPU で構成された m6i と 16 vCPU の m7i インスタンスクラスのパフォーマンスを比較するテストを継続しました。両方のインスタンスタイプのベースライン IOPS 値は 40,000 です。テスト結果は以下のグラフに示されています。m7i インスタンスクラスのパフォーマンスは、512 の同時仮想ユーザーまでは m6i インスタンスクラスと同等です。

m6i_vs_M7i

以下のグラフは、インスタンスの CPU 使用率を示しています。m6i インスタンスの CPU 使用率は 15~20% と低く、一方で m7i インスタンスは最大 40% を記録しました。m6i インスタンスと比較して CPU が 50% 少ないため、m7i インスタンスの CPU 使用率がより高くなることは予想されますが、快適な閾値である 70~80% を大幅に下回っています。

m6i_cpu

m7i_cpu

これらの各テストケースにおいて、各インスタンスでサポートされているプロビジョンド IOPS を最大限に活用しました。メトリクスから、ベンチマークがインスタンスの 40,000 IOPS の制限を利用していることが確認できました。以下の図は、仮想ユーザー数を変化させた場合の総 IOPS を示しています。

m6i_iops

m7i_iops

パフォーマンステストのまとめ

db.r6i.12xlarge、db.r7i.12xlarge、db.m6i.8xlarge、および db.m7i.8xlarge における RDS for SQL Server のパフォーマンステスト結果を以下の表にまとめました。

db.r6i.12xlarge db.r7i.12xlarge db.m6i.8xlarge db.m7i.8xlarge
CPU Count 48 vCPU (24 * 2) 24 vCPU (24 * 1) 32 vCPU (16 * 2) 16 vCPU (16 * 1)
TPM 327668 328791 171104 169794
Relative performance (%) 100 100.34 100 99.23
IOPS/CPU 1250 2500 1250 2500
0.34% -0.77%

ハイパースレッディングを無効にした新世代インスタンスクラス (m7i および r7i) のパフォーマンスは、vCPU 数を 50% 削減しても、第 6 世代インスタンスクラスに匹敵します。ベンチマークデータから、ワークロードが増加すると CPU 使用率が上昇することが確認されました。しかし、使用率は 95 パーセンタイル使用率 (約 80%) を下回っており、これは多くの DB アドミニストレーターが快適に感じるレベルです。このインスタンスは、CPU 数が 2 倍のインスタンスと同等の 1 分あたりのトランザクション数 (TPM) を達成することができました。本番環境で変更を行う前に、非本番環境で特定のインスタンスクラスでワークロードをテストすることを強く推奨します。

費用対効果

RDS for SQL Server の CPU 最適化機能は、パフォーマンスを損なうことなく、お客様に大幅なコスト削減の機会を提供します。SQL Server のライセンスは仮想 CPU あたりで課金されるため、アクティブな仮想 CPU を削減することで、特にEnterprise Edition ライセンスにおいて直接的にコストを削減できます。この機能は、最大パフォーマンスが常に必要ではない開発環境やテスト環境で特に有効で、25〜50% のコスト削減が期待できます。本番ワークロードにおいては、お客様は実際の使用率パターンに基づいて CPU 割り当てを適正化し、パフォーマンス基準を維持することができます。メリットを最大化するために、組織は CPU 使用率を監視し、テスト環境で最適化を開始し、本番環境で段階的に変更を実装する必要があります。設定とパフォーマンス指標の定期的な見直しにより、ワークロード要件を満たしながら最適なコスト効率を実現できます。以下は、ベンチマークに使用された第 7 世代インスタンスのデフォルト CPU と CPU 最適化設定の比較表です。

db.r7i.12xlarge Compute(1) SQL license(2) Windows license(3) Total(1)+(2)+(3) Price reduction
Enterprise 48 vCPU $4380.00 $13140.00 $1611.84 $19131.84
Enterprise 24 vCPU $4380.00 $6570.00 $805.92 $8755.92 −54.2%
db.m7i.8xlarge
Enterprise 32 vCPU $2079.04 $8760.00 $1074.56 $11913.60
Enterprise 16 vCPU $2079.04 $4380.00 $537.28 $6996.32 −41.2%

クリーンアップ

継続的な課金を避けるために、不要になったインスタンスを削除してください。リソースをクリーンアップするには、「RDS for SQL Server DB インスタンスの削除」の手順を完了してください。

結論

Amazon RDS for SQL Server の CPU 最適化機能は、クラウドリソース最適化における重要な進歩を表しており、お客様にパフォーマンスとコスト効率の両方でデータベースインスタンスを細かく調整する柔軟性を提供します。AWS の包括的なテストにより、vCPU 数を削減しても最適なパフォーマンスを維持しながら、ライセンスコストを大幅に削減できることが実証されています。パフォーマンスベンチマークでは、削減された CPU 構成で実行されるワークロードが一貫したスループットレベルを維持し、当社のテストシナリオでは、vCPU が大幅に少ない状況でも 100% を超える相対的なパフォーマンスを達成していることが明確に示されています。これは、多くの SQL Server ワークロードが最適化された CPU 構成で効率的に動作でき、組織が年間数万ドルのライセンスコストを節約できる可能性があることを示しています。組織がクラウド支出の最適化を続ける中、Amazon RDS の CPU 最適化機能は、データベースパフォーマンスがビジネス要件を満たしながら大幅なコスト削減を実現するための強力なツールを提供します。

翻訳はソリューションアーキテクトの Yoshinori Sawada が担当しました。原文はこちらです。


著者について

Barry Ooi

Barry Ooi

Barry は、AWS のシニアデータベーススペシャリストソリューションアーキテクトです。彼の専門分野は、お客様の AWS 導入の一環として、クラウドネイティブサービスを使用したデータプラットフォームの設計、構築、実装です。彼の関心領域には、データ分析と可視化が含まれます。

author name

Sudarshan Roy

Sudarshan は、World Wide AWS Database Services Organization (WWSO) のシニアデータベーススペシャリスト クラウドソリューションアーキテクトです。彼はエンタープライズなお客様向けの大規模なデータベース移行・モダナイゼーションプロジェクトを主導しており、データベースワークロードを AWS クラウドに移行する際の複雑な移行課題の解決に情熱を注いでいます。