cloudpackエバンジェリストの吉田真吾(@yoshidashingo)です。
RDBMS in the Cloud: Oracle Database on AWS」が掲載されたので、読んでみました。
第3回目は P8~P14「Performance Management」
○パフォーマンス管理
AWS上のRDBインスタンスのパフォーマンスは、RDSやEC2のインスタンスタイプ、データベースソフトの設定、アプリケーションワークロード、EC2上にデータベースを稼働している場合であればストレージ設定など、沢山の要素に依存している。以下の章では、Oracle database を稼働しているAWSインフラのパフォーマンスをチューニングするために設定可能なオプションについて記載する。
■インスタンスサイズ
データベースのパフォーマンス向上のためには、サーバーのリソースがパフォーマンスの制約になることを理解する必要がある。もしデータベースの性能がCPUやメモリ、ネットワークのスループットにより制限されているなら、より大きなインスタンスタイプを選択することで、メモリやコンピュートリソース、ネットワークパフォーマンスをスケールすることができる。
多くの顧客にとって、シングル構成のDBインスタンスのパフォーマンスを向上することは、アプリケーション全体のパフォーマンスを向上する最も簡単な方法である。これを解決する方法の一つが垂直スケールである。インスタンスサイズをスケールアップ(あるいはダウン)することで、データベースを、求めるパフォーマンスを提供できるハードウェアに配置する。
Amazon RDS のインスタンスサイズを決める
Amazon RDS ではワークロードに適したインスタンスクラスを選ぶことができる。Amazon RDS はいくつかのデータベースインスタンスのクラスをサポートしている。本書を書いてる時点で、とても小さい Micro インスタンスから、8仮想コア、68GBメモリ、高I/Oキャパシティを備えた 8xlarge インスタンスまで選択肢がある。Amazon RDS のインスタンスクラスはCPU、メモリ、I/Oキャパシティという観点でいうと Amazon EC2 と中身は同じである。完全で最新な情報は、 以下のAmazon RDS for Oracle のホームページを参照されたい
Amazon EC2 インスタンス
高パフォーマンスのデータベースを稼働する際に、ハイメモリインスタンスはデータベースのSGAに割当てるメモリを最大化できる点でよい選択肢である。クラスターコンピュートインスタンスであればとても高速なCPU能力とハイメモリを割当てられる。また、ハイI/OインスタンスであればローカルのSSDドライブをどのインスタンスタイプより高速なI/Oを実現できる点も考慮したい。ハイメモリクラスターインスタンス大容量のメモリをローカルSDストレージを利用できる点で大きめのデータベースインスタンスを稼働させるためのよい選択肢である。インスタンスサイズによるI/O性能の違いについての詳細については、”Disk I/O Management” の章に譲る。
AWS において、インスタンス見積りが過小あるいは過大であると気づいた場合でも、垂直スケール(インスタンスタイプとサイズの変更)させることは非常に容易である。インスタンスサイズの変更方法は、選択したAMIのタイプに依存する。
- EBS-backed インスタンスはルートデバイスが Amazon Elastic Block Store (Amazon EBS) にストアされている。この場合、インスタンスを停止して、AWS Management Console や CLI、API を使用してインスタンスタイプを変更後、インスタンスを再起動すればよい。
- Instance-store インスタンスはルートデバイスがインスタンス内部のストレージにストアされている。この場合、ルートデバイスに変更(たとえばAMIのリバンドル)を施し、インスタンスをターミネートし、新しいインスタンスを開始すればよい。
- どちらのシナリオでも、インスタンスサイズの変更は数分以内に完了する。
注意:そのインスタンスが EBS-backed か instance-store か判別したい場合、AWS Management Console 上のEC2ダッシュボードを見るか、CLI のコマンド ec2-describe- images -v
■Amazon RDS でのディスクI/O管理
Amazon RDS は データベースやログのストレージに Amazon EBS を利用している。要求されたストレージサイズに基づいて、Amazon RDS は自動的に EBS ボリュームをストライピングしてIOPSの性能を増強する。EBS に関する高度な説明については “EBS Volumes” の章に譲る。
Amazon RDS のストレージサイズを拡張する
Amazon RDS は AWS Management Console や CLI(rds-modify- db-instance コマンド)や ModifyDBInstance API を使用することで簡単にスケールアップできる。Amazon RDS はDBインスタンスの再起動やアクティブなプロセスへの割り込みを行わずにストレージを追加できる点に注意すること。Amazon RDS のストレージサイズを増やす主要な理由はデータベースの成長によるが、これに合わせて I/O の向上もされる。既存のDBインスタンスについて、ストレージを拡張すると、I/O性能が向上することにも気づくだろう。
Amazon RDS のインスタンスサイズを拡張する
Amazon RDS のインスタンスサイズを拡張して大きめのインスタンスにすると、以下のような点でパフォーマンスが向上する。
- メモリ容量の向上(キャッシュされるデータ量の向上)
- ネットワーク帯域の向上(EBSのパフォーマンス向上による)
Amazon RDS Provisioned IOPS
Amazon RDS Provisioned IOPS (秒間のI/O処理数) は、データベース作成時にIOPS値を指定することでデータベースのストレージ性能を自分で制御することができるオプションである。この機能は素早く、予測可能で一貫したI/O性能を提供するように設計されている。新しいOracleデータベースインスタンスを作成するときに、AWS Management Console や Amazon RDS のAPIを利用し、関連するストレージのサイズを100GBから3TBまで指定することで、1,000 IOPS から 30,000 IOPS を指定可能である。小さい値から開始して 1,000 IOPS単位で増加が可能である。Amazon RDS の Provisioned IOPS を利用するうえでの注意点は以下である。
- ストレージの量と Provisioned IOPS で指定可能な値の比率は 3 から 10 である。たとえば 100GB のデータベースであれば、Provisioned IOPS は300~1,000 が指定可能である。
- Oracle RDS のページサイズは 8KB である。1,000 Mbps で I/O チャネルが完全に二重化された m2.4xl インスタンスのようなDBインスタンスであれば、8KB I/O における最大IOPSは 25,000 IOPSになる。16KB I/O のワークロードの read 50%、write 50%が、あるいは 8KB I/O 全てが 25,000 IOPSに到達する。
- Provisioned IOPSストレージを使うなら、Provisioned IOPSのためのインスタンス最適化オプション(現在使えるのは m1.large、m1.xlarge、m2.2xlarge、m2.4xlargeのインスタンスクラスのみ)を合わせて推奨する。これは Provisioned IOPS のために利用可能なネットワーク帯域を、m1.large インスタンスの500Mbpsから、m1.xlarge、m2.2xlarge、m2.4xlarge インスタンスで利用可能な1000Mbps まで割当てるものである。IOPS集約型の類似のワークロードを処理するために、1000Mbpsのストレージネットワーク帯域が、他のインスタンスより高速に実際のIOPSを処理する。
- Amazon RDS のデータベースが利用している標準ストレージを Provisioned IOPS ストレージに変換することもできる。実際のI/Oスループット量はワークロードにより異なる。Oracleの場合、最大IOPSは8KBページサイズのとき25,000である。
■Amazon EC2 でのディスクI/O管理
この章では、Oracleデータベースのために選択可能な Amazon EC2 のディスクストレージのオプションについて確認する。
インスタンスストレージ
Amazon EC2 インスタンスには特定のサイズのエフェメラルなローカルストレージが搭載されている。顧客によりインスタンスがターミネートされたり、予期せぬハード障害でインスタンスが別のサーバーで再起動した場合など、ここに保存したデータにはアクセスできなくなる。この特徴から、データベースの永続ストレージに使うには挑戦的なオプションとなっている。しかし以下のようなメリットもある。
- エフェメラルディスクはシーケンシャルアクセスに対して性能がよく、ネットワークの接続性にも影響を受けない。一部の顧客はネットワークの帯域を節約するために一時ファイルをストアする目的でエフェメラルディスクを利用することが有用だと判断している。
- (後述する)ハイI/Oインスタンスは、圧倒的なI/Oパフォーマンスを活かし、データベースのワークロードに推奨されるが、揮発的な特徴を回避するバックアップやレプリケーション戦略は考慮されたい。
- ハイストレージインスタンスには 48TB の内部ストレージが提供され、とても大きいデータベースをインスタンスストレージ上で稼働できる。ハイI/Oインスタンスのように、ローカルストレージを失うリスクを軽減するバックアップやレプリケーション戦略は必要である。
EBSボリューム
AWS はAmazon EBS という永続的なブロックレベルのストレージボリュームも提供している。Amazon EBSボリュームはインスタンスのライフサイクルとは切り離すことのできる off-instance なストレージである。Amazon EBSボリュームのデータは単一コンポーネントで発生しうる障害によるデータロスとを避けるために、複数AZのサーバーでミラーされている。スナップショットを用いて容易に Amazon S3 にバックアップできる。これらの属性は EBS にデータファイルやログファイルやフラッシュリカバリエリアを設定するのに適している。EBSの最大サイズは1TBであるが、複数ボリュームをストライピングすることでより大きいサイズのデータベースを配置することも可能だ。EBSボリュームには下記に章で記載するように、標準ボリュームとProvisioned IOPSボリュームの2種類ある。
標準 EBS ボリューム
標準 EBS ボリュームは平均 約100 IOPS と、ベストエフォートで数百 IOPS までバーストする性能を提供する。標準EBSボリュームは起動ボリュームのように通常適度でバーストも必要なI/O要件を満たすのに最適である。標準EBSボリュームは(ランダムリード/ライトより)シーケンシャルリード/ライトに適している。
Provisioned IOPS ボリューム
Provisioned IOPS ボリュームは予測可能で一貫した高いパフォーマンスを実現するように設計されており、データベースのようなI/Oの集中するワークロードを処理するのに適している。Provisioned IOPS ボリュームを利用すれば、作成するボリュームのライフサイクルにわたり、IOPSを指定することが可能になる。以下がProvisioned IOPS ボリュームの重要な特徴である。
- Amazon EBS は現在 Provisioned IOPS ボリュームあたり 4,000 IOPSをサポートしている。
- 10個のボリュームをストライピングすることで 40,000 IOPS までデータベースの性能を引き上げることができる。
- Provisioned IOPS のI/O操作は 16KB 以下のサイズで保証される。16KB以上だと、IOPS は I/O サイズに比例して減少する。たとえば 4,000 IOPS ボリュームを用意し、平均I/Oサイズが 32KB だと 2,000 IOPS しか期待できない。I/Oサイズが 64KB の場合は、1,000 IOPS しか期待できない。
- ボリュームサイズ(GBあたり)と Provisioned IOPS の比率の最大は 10 である。たとえば 50GB のボリュームの場合、Provisioned IOPS の最大は 500 である。
- より一貫したパフォーマンスが必要だったり、データベースが一貫して高いI/Oワークロードを生成する場合、Provisioned IOPS は、標準EBSボリュームはよりもコスト的に有効である。(標準EBSボリュームが実際使用されたI/Oに課金されるのに対し)Provisioned IOPS は Provisioned IOPS に設定されたIOPS数に課金される。これには、I/Oコストがより予測しやすいという利点がある。
EBS-Optimized インスタンス
EBS-Optimized インスタンスは EBS ボリュームに対する Provisioned IOPS を十分に活用する方法だ。EBS-Optimized インスタンスは、インスタンスにより 500Mbps あるいは 1,000Mbps をオプションとして指定可能にし、Amazon EC2 と Amazon EBS 間の専用の帯域を保証する。EBS-Optimized インスタンスにアタッチすると、Provisioned IOPS ボリュームは 99.9% の確率で、指定のパフォーマンスのブレ 10% 以内の性能を提供するように設計されている。EBS-Optimized インスタンスと Provisioned IOPS ボリュームの組合せは、インスタンスが一貫した高いI/Oパフォーマンスを発揮する完全な方法である。高いI/O要件のある多くのデータベースがこの機能によりメリットを享受する。インスタンスと EBS の間で予測可能な帯域が必要な場合には EBS-optimized インスタンスと標準 EBS ボリュームを利用するということもできる。 EBS-Optimized インスタンスは現在いくつか大きめのインスタンスタイプでしかサポートされていない点には注意が必要である。詳細な情報は以下を参照されたい。
yoshidashingo)監修のもと掲載しています。
元記事は、こちら