Amazon Web Services ブログ

新機能: Amazon RDS for Oracle Database がvCPUの削減や最適化に対応

日々の活動から画一的な重労働を取り除くために、多くのAWSユーザーがマネージドサービスを利用しています。Amazon Relational Database Service (Amazon RDS) は、リレーショナルデータベースをデプロイするときに利用可能なマネージドサービスの一つです。Amazon RDS を利用すると、リレーショナルデータベースの運用と保守の管理工数を大幅に削減でき、クラウド上で Oracle Database を簡単にセットアップ、運用、スケールアップできます。Oracle Database の複数のエディションを、コスト効率の良いサイズ変更可能なハードウェアに数分でデプロイできます。詳細については Amazon RDS for Oracle Database をご覧ください。

すべてのAWSサービスと同様に、Amazon RDS のロードマップは、主にお客様からのフィードバックや製品改善リクエストに基づいています。Oracle RDS for Oracle Database でデータベースワークロードを実行しているエンタープライズの複数のお客様から、私たちはフィードバックを受けました。そのフィードバックとは、物理コアに対するRAMの比率を Amazon RDS for Oracle より大幅に高くすることで、Oracleのワークロードを実行しているエンタープライズのお客様は、ソフトウェアライセンスの価値を最大化しているというものでした。

メモリーを大量に消費するデータベースワークロードを処理するお客様からも同様のフィードバックがありました。これらのデータベースでは、ワークロードの増加に対応するために、CPUの追加なしにメモリーの増強のみを必要としていることがよくあります。今までの制約下では、お客様はメモリーを増やすために不要なCPUを追加していました。しかし、Oracle社は Oracle Database にCPUに基づくライセンススキームを採用しているため、追加のライセンスコストが発生します。

この記事の目的は、Amazon RDS 上の Oracle Database のための2つの新機能を使用することで、仮想CPU (vCPU) の数を減らし、ライセンスコストを最適化する方法を説明することです。

  1. X1およびX1eインスタンスのサポート
  2. CPU最適化

1つ目のリリース: Amazon RDS for Oracle がX1およびX1eインスタンスをサポート

Oracleワークロードを実行しているエンタープライズのお客様が、物理コアに対するRAMの比率を30以上にすることでソフトウェアライセンスの価値を最大にしていることを、最近の事例とフィードバックは示唆しています。

Amazon RDS は、汎用、メモリー最適化、性能バースト可能の3つのインスタンスクラスをサポートしています。Amazon EC2 インスタンスタイプの詳細については、Amazon EC2 ドキュメントの「インスタンスタイプ」を参照してください。Amazon RDS for Oracle がサポートするDBインスタンスについては、「DBインスタンスクラス」を参照してください。

2018年5月25日から、X1およびX1eインスタンスタイプで Amazon RDS for Oracle データベースを起動できるようになりました。X1およびX1eインスタンスは、現行の Amazon EC2 インスタンスタイプの中でvCPUに対する最も高いメモリー比率を提供します。X1eインスタンスは30.5 : 1 = RAM (GB) : vCPU、または61 : 1 = RAM (GB) : 物理コアを提供します(例えば、db.x1e.16xlargeは 64 vCPU および 1952GB RAM が搭載されています)。X1インスタンスタイプは15.25 : 1 = RAM (GB) : vCPU、または30.5 : 1 = RAM (GB) : 物理コアを提供します(例えば、db.x1.16xlargeは 64 vCPU および 976GB RAM が搭載されています)。

X1およびX1eのDBインスタンスタイプは、データ分析、インメモリーデータベース、高性能の本番ワークロードなどのメモリー集約型、およびレイテンシ重視のデータベースワークロードに最適化されています。X1およびX1eインスタンスを使用すると、プロセッサライセンス数を増やすことなくメモリーを増やすことができ、Oracleライセンスの価値を最大化できます。

2つ目のリリース: Amazon RDS でのCPU最適化

Amazon EC2 でCPU最適化機能が利用できるようになる以前は、ワークロードが必要とするRAMとコアとの比率に最も適合するEC2インスタンスを選択することしかできませんでした。これによって、vCPUの選択が最適ではなくなり、ライセンスコストが非常に高くなることがありました。Amazon RDS for Oracle でサポートされるX1/X1eインスタンスは、より高いvCPUに対するメモリー比率を提供します。これにより、より少ないvCPU数で十分な量のRAMを確保できるようになったことで、Oracleライセンスコストに役立ちます。

X1およびX1eインスタンスはお客様のワークロードに役立つことができますが、メモリーとvCPUの比率は引きつづき固定化されています。つまり、お客様のワークロードの増加を満たすために、より多くのメモリーを主に必要とする場合、メモリーを増やすためにはCPUを追加する必要があります。たとえば、要件を満たすために 1TB RAM と 16 vCPU を必要とするメモリー集約型のワークロードを実行する場合、DBインスタンスタイプはdb.x1e.8xlargeが最適です。しかし、このインスタンスタイプは 32 vCPU 搭載しているため、追加の 16 vCPU 分のライセンスが必要になります。

House of Brick Technologies 社から歓迎を受けたEC2でのCPU最適化機能のリリースに続いて、Amazon RDS for Oracle にもこの機能を拡張します。CPU最適化機能を使用すると、必要な分だけのvCPUを有効にしながら、最適なメモリー、ストレージ、およびネットワークを備えたEC2を選択でき、ライセンスコストを最適化できます。

この機能を使用すると、次のことができます:

  1. 新しい RDS for Oracle インスタンスを起動するときに、vCPU数を指定します(メモリー、ストレージ、ネットワーク帯域はフルサイズのものと同じです)
  2. ハイパフォーマンスコンピューティング (HPC) アプリケーションのようなシングルスレッドCPUでよく実行されるワークロード向けに、インテル ハイパースレッディング・テクノロジー(インテル HTテクノロジー)を無効化することもできます

インテル HTテクノロジー はEC2インスタンスではデフォルトで有効ですが、一部のアプリケーション(たとえばHPCアプリケーション)では、それからの恩恵を受けられるようには設計されていません。インテル HTテクノロジー が有効になっていると、コンピューティング集約型ワークロードではコンテキストスイッチによってパフォーマンスが低下します。この機能を無効化することで、お客様はアプリケーションのパフォーマンスをチューニングできます。

CPUコンポーネントの最適化

ほとんどの場合、お客様のワークロードに合うメモリーとvCPU数の組み合わせを持つDBインスタンスクラスがあります。ただし、特定のワークロードやビジネスニーズのために、以下のプロセッサ機能を使用してDBインスタンスを最適化することができます。

DBインスタンスでCPU最適化を設定にするには、AWS CLI を使用し、コマンドにprocessor-featuresを含めます。processor-featuresは以下の2つのパラメーターを入力として受け取ります:

  1. CPUコア数 (coreCount): coreCount属性は、DBインスタンスで使用できるCPUコアの最大数を指定します。DBインスタンスのCPUコアを変更しても、メモリー、ストレージ、ネットワーク帯域はフルサイズのものと同じ量を引きつづき利用できます。この機能を使用すると、メモリー集約型のワークロードに十分な量のRAMを積んだ、より少ないCPUコア数のDBインスタンスを使用して、ソフトウェアのライセンス費用を最適化できます。最優先要件として1TB近くのメモリーと 16 vCPU を必要とするDBインスタンスという先ほどの例を考えてみましょう。DBインスタンスタイプ db.x1e.8xlargeは要件に最も合っています(976GB RAM と 32 vCPU)が、余分な 16 vCPU の追加ライセンスが必要になるという欠点があります。CPU最適化機能を使えば、db.x1e.8xlargeインスタンスをカスタマイズし、16 vCPU のみ使えます(これには 16 vCPU 分だけの Oracle Database ライセンスが必要です)。
  2. コア当たりのスレッド数 (threadsPerCores): threadsPerCore属性を使用して、CPUコア当たり1つのスレッドを指定することで インテル HTテクノロジー を無効にできます。これはHPCワークロードなどの特定のワークロードに対して行うことができます。

コア数と、コア当たりのスレッド数は別々に制御できます。1つのリクエストで1つだけセットすることも、両方をセットすることもできます。設定がDBインスタンスに関連付けられた後は、それが実際に変更されるまで設定は維持されます。

以下の操作で、DBインスタンスクラスのCPUコア数と、コア当たりのスレッド数を設定できます。

  1. DBインスタンスの作成
  2. DBインスタンスの変更
  3. スナップショットからのDBインスタンスの復元
  4. DBインスタンスの特定時点への復元

RDS for Oracle のCPU最適化機能の詳細については、「DBインスタンスクラスのプロセッサの構成」を参照してください。(訳注: 2018年6月19日時点では日本語版に記述がないため、英語版を参照してください)

Oracleを実行する RDS DBインスタンスでのCPU最適化の実装

CPU最適化機能がどのように働くか理解したところで、実装についてです。この例では AWS CLI ユーティリティを使用してCPUの最適化機能を実装しています。AWS CLI の設定方法の詳細については「AWS CLI の設定」を参照してください。

デフォルトでは、Amazon RDS DBインスタンスクラスは インテル ハイパースレッディング・テクノロジー をサポートしています。これにより、1つの Intel Xeon CPUコアで複数のスレッドを同時に実行できます。各スレッドはDBインスタンス上の1つのvCPUとして表されます。DBインスタンスにはデフォルトのCPUコア数があり、それはDBインスタンスタイプによって異なります。たとえば db.r4.4xlarge DBインスタンスタイプは、デフォルトでは8つのCPUコアと、コアあたり2つのスレッド、つまり合計 16 vCPU を持ちます。

デフォルト(CPU最適化機能なし)では、16 vCPU とハイパースレッディングが有効な Oracle DBインスタンスのRDSが作成されます。CPU最適化を使用すると、インスタンス上の合計vCPUより少ない値を指定したり、ハイパースレッディングを無効にしたりすることができます。

新規DBインスタンス作成時にCPU最適化を有効にする

DBインスタンスを作成するときにCPU最適化機能を有効にするには、次の手順に従います:

  1. RDS for Oracle Database インスタンス作成時に使用しようと考えている値が、特定の RDS DB インスタンスで許可されているかどうか問い合わせます。AWS CLI にはdescribe-orderable-db-instance-optionsという新しいAPIが追加されました。特定のDBインスタンスのcoreCountthreadsPerCoreで使用可能なすべての値を表示することができます。次の例では、DBインスタンスタイプにdb.r4.4xlargeを使用しています。コマンドの出力は一部切り捨てられ、関連する出力のみが記載しています。RDS for Oracle でサポートされているすべての使用可能なDBインスタンスについては「DBインスタンスクラス」を参照してください。
    [ec2-user@ip-XXX-XX-XX-XXX ~]$ aws rds describe-orderable-db-instance-options --engine oracle-ee  --db-instance-class db.r4.4xlarge
    
    "AvailableProcessorFeatures": [
                    {
                        "DefaultValue": "8", 
                        "Name": "coreCount", 
                        "AllowedValues": "1,2,3,4,5,6,7,8"
                    }, 
                    {
                        "DefaultValue": "2", 
                        "Name": "threadsPerCore", 
                        "AllowedValues": "1,2"
                    }
                ],
  2. CPU最適化をオンにして RDS for Oracle DBインスタンスを作成します。この例では、DBインスタンスを作成し、coreCountthreadsPerCore属性で許可されるいずれかの値を指定するためにprocessor-featuresを使用してCPU最適化機能を有効にしています。
    aws rds create-db-instance --db-instance-identifier optimized-cpu-db --engine oracle-ee --engine-version 11.2.0.4.v12 --db-instance-class db.r4.4xlarge --master-username admin --master-user-password password --allocated-storage 50  --region us-west-2 --db-subnet-group-name default --processor-features "Name=coreCount,Value=2" "Name=threadsPerCore,Value=1"

    前述の AWS CLI コマンドcreate-db-instanceには、いくつかの入力パラメーターが必要です。この例で使用されるパラメターの説明を次の表に示します。

      属性名 属性値
    1 --db-instance-identifier RDS for Oracle DBインスタンス識別子のユーザー定義名(この例ではoptimized-cpu-dbに設定)
    2 --engine Oracle Database エンジンのエディション(この例ではoracle-eeに設定)
    3 --engine-version Oracle Databaase エンジンのバージョン(例えば11.2.0.4.v12
    4 --db-instance-class ワークロード要件に合った RDS for Oracle DB 用のユーザー定義DBインスタンスクラス(例えばdb.r4.4xlarge
    5 --master-username RDS for Oracle Database のマスターユーザー用のユーザー定義値(この例ではadminに設定)
    6 --master-user-password RDS for Oracle Database のマスターユーザーのパスワード用のユーザー定義値(この例ではpasswordに設定)
    7 --allocated-storage RDS for Oracle DBインスタンスに割り当てる Amazon EBS ストレージ (GB) 用のユーザー定義値
    8 --region DBインスタンスを作成する必要があるAWSリージョン用のユーザー定義値(この例ではus-west-2
    9 --db-subnet-group-name DBインスタンス作成時に特定の仮想プライベートクラウド (VPC) を指定可能(この例ではデフォルトのdb-subneteを使用するように設定)
    10 --processor-features CPU最適化を有効にするためのオプション。特定のインスタンスタイプで許容値内でのcoreCountおよびthreadsPerCore用のユーザー定義値(この例では、coreCountが2、threadsPerCoreが1に設定)
  3. 作成されたインスタンスでCPU最適化機能が有効になっていることを確認します。DBインスタンスの作成後、AWS CLI コマンドのdescribe-db-instancesを使用してCPU最適化機能が有効になっているかどうかを確認できます。CPU最適化オプションが有効になっている場合、このコマンドの出力にはProcessorFeaturesセクションが追加されます。次の例で示すとおり、DBインスタンスのcoreCountthreadsPerCoreが表示されます。(出力は一部切り捨てられ、関連する詳細のみ記載しています)
    [ec2-user@ip-XXX-XX-XX-XXX ~]$ aws rds describe-db-instances --db-instance-identifier optimized-cpu-db --region us-west-2
    
    "ProcessorFeatures": [
                    {
                        "Name": "coreCount", 
                        "Value": "2"
                    }, 
                    {
                        "Name": "threadsPerCore", 
                        "Value": "1"
                    }
                ],

DBインスタンス作成後にCPU最適化を使用する

CPU最適化は、Oracleを実行する RDS DBインスタンスを作成するときに構成可能なだけでなく、インスタンスの作成後に構成することもできます。modify-db-instanceコマンドを使用してDBインスタンスクラスのCPUコア数とコア当たりのスレッド数を指定できます。

DBインスタンスの変更を決定し、coreCountおよびthreadsPerCoreにカスタマイズされた値を提供する前に、describe-valid-db-instance-modifications AWS CLI コマンドを使用して、これらの属性に使用可能な値を調べることができます。(出力は一部切り捨てられ、関連する詳細のみ記載しています)

[ec2-user@ip-XXX-XX-XX-XXX ~]$ aws rds describe-valid-db-instance-modifications --db-instance-identifier optimized-cpu-db --region us-west-2

"ValidProcessorFeatures": [
            {
                "DefaultValue": "8", 
                "Name": "coreCount", 
                "AllowedValues": "1,2,3,4,5,6,7,8"
            }, 
            {
                "DefaultValue": "2", 
                "Name": "threadsPerCore", 
                "AllowedValues": "1,2"
            }
        ]

この出力から、以前のステップ2で作成した RDS for Oracle DBインスタンスでのCPU最適化機能の許容値を確認できます。

これでDBインスタンスを変更することができます。次のように、coreCountthreadsPerCountにカスタム値としてそれぞれ42を使用します。この例ではapply-immdiateフラグを使用して、即座に変更を適用するように Amazon RDS に指示しています(このアクションの結果、データベースは再起動し、短いダウンタイムが発生します)

[ec2-user@ip-XXX-XX-XX-XXX ~]$ aws rds modify-db-instance --db-instance-identifier optimized-cpu-db --region us-west-2 --processor-features "Name=coreCount,Value=4" "Name=threadsPerCore,Value=2" --apply-immediate

DBインスタンスの変更が完了したら、describe-db-instances AWS CLI コマンドを実行して、DBインスタンスのcoreCountthreadsPerCoreの変更を確認できます。出力は一部切り捨てられ、関連する詳細のみ記載しています。

[ec2-user@ip-XXX-XX-XX-XXX ~]$ aws rds describe-db-instances --db-instance-identifier optimized-cpu-db --region us-west-2

"EngineVersion": "11.2.0.4.v12",
"ProcessorFeatures": [
                {
                    "Name": "coreCount", 
                    "Value": "4"
                }, 
                {
                    "Name": "threadsPerCore", 
                    "Value": "2"
                }
            ],

デフォルトのプロセッサ構成にDBインスタンスをリセットする

デフォルトでは、Amazon RDS for Oracle でCPU最適化機能は無効です。つまり、すべての RDS for Oracle DBインスタンスは、RDS DBインスタンスタイプに基づいたデフォルトのプロセッサ構成で作成されます。この例では、db.r4.4xlarge DBインスタンスタイプとデフォルトの構成(CPU最適化機能を無効にした状態)を使用しています。RDS for Oracle DBインスタンスは 16 vCPU すべてとハイパースレッディングが有効な状態で作成されます。

CPU最適化機能を有効にし、そのDBインスタンス上で使用可能な物理コアの一部だけを使用しました。しかし、RDS for Oracle DBインスタンスを変更し、デフォルトの構成(つまり、すべての物理コアとハイパースレッディングが有効な状態)に戻すこともできます。以下のように、modify-db-instance AWS CLI コマンドと--use-default-processor-featuresフラグを使用できます。出力は一部切り捨てられ、関連する詳細のみ記載しています。

[ec2-user@ip-XXX-XX-XX-XXX ~]$ aws rds modify-db-instance --db-instance-identifier optimized-cpu-db --use-default-processor-features --apply-immediate --region us-west-2

DBインスタンスの変更が完了したら、describe-db-instances AWS CLI コマンドを実行して変更を確認できます。CPU最適化機能を無効にしてデフォルト構成に変更したため、以下の出力に示すように、describe-db-instancesコマンドの出力にはcoreCountthreadsPerCoreを表示するProcessorFeaturesセクションがありません。

出力は一部切り捨てられ、関連する詳細のみ記載しています。EngineVersionの後、CharacterSetNameの前にProcessorFeaturesセクションがないことに注目してください。

            "EngineVersion": "11.2.0.4.v12", 
            "CharacterSetName": "AL32UTF8", 
            "AvailabilityZone": "us-west-2a", 
            "DomainMemberships": [], 
            "StorageType": "standard", 
            "DbiResourceId": "db-56TD5CQRFC7XKKFKQAHBZV4QFE", 
            "CACertificateIdentifier": "rds-ca-2015", 
            "StorageEncrypted": false, 
            "DBInstanceClass": "db.r4.4xlarge", 
            "DbInstancePort": 0, 
            "DBInstanceIdentifier": "optimized-cpu-db"
        }
    ]

まとめ

この記事では Amazon RDS for Oracle Database の最近リリースされた2つの機能について説明しました。これらの機能を使用すると Oracle Database ソフトウェアのライセンス費用を最適化し、Amazon RDS 上の大規模な Oracle Database ワークロードのサポートを有効化できます。

CPU最適化機能を使用して、新しいDBインスタンスを作成する際に Amazon RDS for Oracle でcoreCountとハイパースレッディングにカスタム値を指定する方法を示しました。さらに、インスタンス作成後にcoreCountとハイパースレッディングを変更する方法、最後にすべてのcoreCountとハイパースレッディングを有効化したデフォルトの動作に戻す方法を示しました。

この情報が役に立つことを期待しています。特定ワークロードでのライセンスコストの最適化に、これら2つの機能がどう役立つかを知ることを楽しみにしています。

著者について

Sameer MalikSameer Malik は Database Specialist Solutions Architect です。彼はAWSのお客様と協力して、データベースプロジェクトに関するガイダンスと技術支援を提供し、AWSを使用する際のソリューションの価値を向上させています。

翻訳はソリューションアーキテクトの柴田(シバタツ)が行いました。原文は New features to reduce and optimize vCPUs on Amazon RDS for Oracle Database です。