Open8

RDSとAuroraのIO性能の違い

hirenhiren

Amazon Aurora ストレージ

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.StorageReliability.html

Aurora I/O-Optimized— I/O 集約型のアプリケーションの価格性能と予測可能性が向上しました。お支払いいただくのは DB クラスターの使用量とストレージに対してのみで、読み取りと書き込み I/O オペレーションに追加料金はかかりません。
Aurora I/O-Optimized は、I/O 支出が Aurora データベースの総支出の 25% 以上である場合に最適な選択肢です。

Aurora Standard — I/ O使用量が中程度の多くのアプリケーション向けの費用対効果の高い価格設定。DB クラスターの使用量とストレージに加えて、I/O オペレーションの 100 万件のリクエストごとに標準料金をお支払いいただきます。
Aurora Standard は、I/O 支出が Aurora データベースの総支出の 25% 未満である場合に最適な選択肢です。

Aurora 用の DB インスタンスクラスのハードウェア用語

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Concepts.DBInstanceClass.Summary.html

最大 EBS 帯域幅 (Mbps)
最大 EBS 帯域幅 (メガビット/秒)。8 で割ると、メガバイト/秒でのスループットが得られます。
この図は、DB インスタンス内のローカルストレージの I/O 帯域幅を示しています。Aurora クラスターボリュームとの通信には適用されません。

https://aws.amazon.com/jp/rds/aurora/faqs/#What_are_I.2FO_operations_in_Aurora_and_how_are_they_calculated.3F

クエリトラフィックをメモリまたはキャッシュから完全に提供できる場合、メモリからデータページを取得する

各データベースページについては、Amazon Aurora MySQL 互換エディションでは 16 KB、Aurora PostgreSQL 互換エディションでは 8 KB です。

書き込み I/O オペレーションは 4 KB 単位でカウントされます。例えば、ログレコードが 1,024 バイトの場合、1 書き込み I/O オペレーションとカウントされます。ただし、ログレコードが 4KB を超える場合は、ログレコードを保持するために複数の書き込み I/O オペレーションが必要になります。
同時書き込みオペレーションでログレコードが 4 KB 未満の場合、I/O 消費を最適化するため Aurora データベースエンジンによってまとめてバッチ処理されます。従来のデータベースエンジンとは異なり、Aurora はダーティデータページをストレージにフラッシュすることはありません。

hirenhiren

I/O仕様やAurora で I/O を計画する場合のベスト プラクティスが載っている公式ブログ
https://aws.amazon.com/jp/blogs/database/planning-i-o-in-amazon-aurora/

  • レビューインデックス:
    • すべてのインデックスが書き込み I/O の量を増加させるため、未使用のインデックスを削除します。
    • テーブルスキャンやその他の高 I/O アクティビティに対処するために新しいインデックスを作成します。
    • 主キーの場合、キー値に自動増分整数を使用します。
    • テーブルとインデックスを作成するときは、適切なフィルファクターを考慮してください。
    • 可能な場合はカバーリング インデックスを使用します。
    • 特定のクエリに対して分析されるページを最小限に抑えるには、可能な場合はパーティションを使用します。
  • パフォーマンスの低いクエリを特定します。
    • Amazon RDS Performance Insightsなどのツールを使用して、パフォーマンスが低いクエリを特定します。
    • I/O 待機時間が長いクエリの実行プランを調べます。
    • I/O 待機時間の多いクエリを書き直すか、これらのクエリをサポートする適切なインデックスを作成します。
  • ハードウェアについて検討します。
    • 99.98% 以上の目標でバッファ キャッシュ ヒット率を監視します。このメトリックは、ページがディスクから読み取られるのではなく、バッファ プール内で見つかる頻度を反映します。
    • バッファ キャッシュ ヒット率が低い場合は、より多くのメモリを備えたインスタンス タイプの使用を検討してください。
    • より多くのメモリを提供するより大きなインスタンス サイズにスケーリングすると、レポート ワークロードの全体的な読み取り I/O が削減され、全体的な I/O コストが削減される可能性があります。
  • 組み込みの Aurora 機能を使用する:
    • 高い I/O につながる可能性がある論理エクスポートを使用するのではなく、 Aurora のポイントインタイムリカバリ機能を活用してください。
    • 論理エクスポート ツールを使用する場合はデータベース全体をスキャンする必要があるため、クローンの作成には I/O は不要です。

Aurora は、高スループットの超並列 OLTP システムとして設計されています。Aurora は、1 秒あたり数十万のクエリで数千の接続を処理することに優れています。これらのクエリは通常、単一の行または小さな行セットで機能します。
大規模なテーブルスキャンと大規模な集計を中心に設計されたワークロードでは、かなりの数の読み取り IOPS が生成されます。

hirenhiren

Amazon RDS DB インスタンスストレージ

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_Storage.html

  • プロビジョンド IOPS SSD - プロビジョンド IOPS ストレージは、低 I/O レイテンシーおよび一貫した I/O スループットが必要となる I/O 負荷の高いワークロード (特にデータベースワークロード) のニーズを満たすように設計されています。プロビジョンド IOPS ストレージは本稼働環境に最適です。
  • 汎用 SSD - 汎用 SSD ボリュームは、中規模の DB インスタンスで実行しているさまざまなワークロードに対応できるコスト効率の高いストレージとして使用できます。汎用ストレージは、開発およびテスト環境に適しています。
  • マグネティック - HDD。

プロビジョンド IOPS SSD io2 Block Express ストレージ

データベースエンジン ストレージサイズの範囲 プロビジョンド IOPS の範囲 最大スループット
Db2、MariaDB、MySQL、および PostgreSQL 100~65,536 GiB 1,000~256,000 IOPS 16,000 MiB/秒
Oracle 100~199 GiB 1,000~199,000 IOPS 4,000 MiB/秒
Oracle 200~65,536 GiB 1,000~256,000 IOPS 16,000 MiB/秒
SQL Server 20~65,536 GiB 1,000~256,000 IOPS 4,000 MiB/秒

旧世代のio1もあるが割愛

プロビジョンド IOPS 汎用 SSD ストレージ(gp3)

DB エンジン ストレージサイズ ベースラインストレージパフォーマンス プロビジョンド IOPS の範囲 プロビジョニングされたストレージのスループットの範囲
Db2、MariaDB、MySQL、および PostgreSQL 20~399 GiB 3,000 IOPS/125 MiB/秒 該当なし 該当なし
Db2、MariaDB、MySQL、および PostgreSQL 400~65,536 GiB 12,000 IOPS/500 MiB/秒 12,000~64,000 IOPS 500~4,000 MiB/秒
Oracle 20~199 GiB 3,000 IOPS/125 MiB/秒 該当なし 該当なし
Oracle 200~65,536 GiB 12,000 IOPS/500 MiB/秒 12,000~64,000 IOPS 500~4,000 MiB/秒
SQL Server 20~16,384 GiB 3,000 IOPS/125 MiB/秒 3,000~16,000 IOPS 125~1,000 MiB/秒

旧世代のgp2もあるが割愛

ソリッドステートドライブ (SSD) ストレージタイプの比較

特徴 プロビジョンド IOPS (io2 Block Express) プロビジョンド IOPS (io1) 汎用 (gp3) 汎用 (gp2)
説明 RDS ストレージポートフォリオ内で最高のパフォーマンス (IOPS、スループット、レイテンシー) レイテンシーの影響を受けやすいトランザクションワークロード向けに設計されています 一貫したストレージパフォーマンス (IOPS、スループット、レイテンシー) レイテンシーの影響を受けやすいトランザクションワークロード向けに設計されています ストレージ、IOPS、スループットを個別にプロビジョニングできる柔軟性 さまざまなトランザクションワークロードに対して、料金パフォーマンスのバランスをとります。 バースト可能な IOPS を提供します。 さまざまなトランザクションワークロードに対して、料金パフォーマンスのバランスをとります。
ユースケース サブミリ秒のレイテンシーと最大 256,000 IOPS の持続的な IOPS パフォーマンスを必要とするビジネスクリティカルなトランザクションワークロード。 最大 256,000 IOPS の持続的な IOPS パフォーマンスを必要とするトランザクションワークロード。 開発/テスト環境の中規模リレーショナルデータベースで実行される幅広いワークロード 開発/テスト環境の中規模リレーショナルデータベースで実行される幅広いワークロード
レイテンシー サブミリ秒 (99.9% の期間一貫して提供) 1 桁ミリ秒 (99.9% の期間一貫して提供) 1 桁ミリ秒 (99% の期間一貫して提供) 1 桁ミリ秒 (99% の期間一貫して提供)
ボリュームサイズ 100~65,536 GiB 100~65,536 GiB (RDS for SQL Server では 20–16,384 GiB) 20~65,536 GiB (RDS for SQL Server では 16,384 GiB) 20~65,536 GiB (RDS for SQL Server では 16,384 GiB)
最大 IOPS 256,000 256,000 (RDS for SQL Server では 64,000) 64,000 (RDS for SQL Server では 16,000) 64,000 (RDS for SQL Server では 16,000) 注記 gp2 ストレージに IOPS を直接プロビジョニングすることはできません。IOPS は割り当てられたストレージサイズによって異なります。
最大スループット プロビジョンド IOPS に基づいて最大 4,000 MB/秒まで拡張 スループットはプロビジョンド IOPS ごとに最大 0.256 MiB/秒に比例して拡張できます。16 KiB の I/O サイズでは 256,000 IOPS、256 KiB の I/O サイズでは 16,000 IOPS 以上で 4,000 MiB/秒の最大スループットを達成できます。 AWS Nitro システムベースでないインスタンスの場合、16 KiB の I/O サイズで 128,000 IOPS で最大 2,000 MiB/秒のスループットを達成できます。 プロビジョンド IOPS に基づいて最大 4,000 MB/秒まで拡張 最大 4,000 MB/秒の追加のスループットをプロビジョニング (RDS for SQL Server では 1,000 MB/秒) 1,000 MB/秒 (RDS for SQL Server では 250 MB/秒)
AWS CLI および RDS API 名 io2 io1 gp3 gp2
hirenhiren

モニタリング

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_Storage.html#Concepts.Storage.Metrics

便利なメトリクス

  • DiskQueueDepth - サービスされるのを待つキュー内の I/O リクエスト数。アプリケーションによって送信されても、デバイスが他の I/O リクエストの処理でビジー状態のため、デバイスに送信されていない I/O リクエストです。キューでの待ち時間は、レイテンシーとサービス時間 (メトリクスとしては使用できない) のコンポーネントです。このメトリックは、特定の時間間隔の平均キュー深度として報告されます。Amazon RDS は、キューの深さを 1 分間隔で報告します。キューの深度の典型的な値は、0 から数百までの範囲です。
  • EBSByteBalance% - RDS データベースのバーストバケットに残っているスループットクレジットの割合。このメトリクスは基本モニタリング専用です。メトリクス値は、データベースファイルを含むボリュームのみではなく、ルートボリュームを含むすべてのボリュームのスループットに基づいています。
    このメトリクスがゼロに近づくと、DB インスタンスのコンピューティングキャパシティーが不足していることを意味します。このような状況が定期的に発生する場合は、db.r6g.large から db.r6g.xlarge など、より大きなインスタンスクラスサイズにアップグレードすることを検討してください。詳細については、「DB インスタンスクラス」を参照してください。
  • ReadIOPS および WriteIOPS - 1 秒ごとの I/O オペレーションの数。このメトリクスは、指定された時間間隔の平均 IOPS として報告されます。Amazon RDS は、IOPS の読み取りと書き込みを 1 分間隔で個別に報告します。TotalIOPS は、IOPS の読み取りおよび書き込み IOPS の合計です。IOPS の典型的な値は、1 秒あたり 0 から数万の範囲内です。
    TotalIOPS 値が DB インスタンスに設定したプロビジョンド IOPS 値に定期的に近づく場合は、プロビジョンド IOPS (io1、io2 Block Express、gp3 ストレージタイプ) を増やすことを検討してください。
    測定された IOPS 値は、個別の I/O オペレーションのサイズには依存しません。これは、I/O パフォーマンスの測定時に、I/O オペレーションの数のみではなく、インスタンスのスループットを見る必要があることを意味しています。
  • ReadLatency および WriteLatency - I/O リクエスト送信から完了までの経過時間。このメトリクスは、指定された時間間隔の平均レイテンシーとして報告されます。Amazon RDS は 1 分間レイテンシーで読み取りおよび書き込み IOPS を個別に報告します。レイテンシーの一般的な値はミリ秒 (ms) です。
  • ReadThroughput および WriteThroughput - ディスクへまたはディスクから転送される 1 秒ごとのバイト数。このメトリックは、特定の時間間隔の平均スループットとして報告されます。Amazon RDS は、1 分間隔の読み取りおよび書き込みスループットを個別に 1 秒あたりのバイト (B/秒) 単位で報告します。スループットの典型的な値は、0 から I/O チャネルの最大帯域幅までの範囲内です。
    スループット値が DB インスタンスの最大スループットに定期的に近づいている場合は、gp3 ストレージタイプを使用している場合は、より多くのストレージスループットのプロビジョニングを検討してください。
hirenhiren

Auroraで書き込み性能を更にスケールしたい場合はAmazon Aurora PostgreSQL Limitless Databaseを検討する