Amazon Web Services ブログ

Amazon Aurora PostgreSQL Limitless Database の一般提供の開始

10 月 31 日、Amazon Aurora の新しいサーバーレス水平スケーリング (シャーディング) 機能である Amazon Aurora PostgreSQL Limitless Database の一般提供についてお知らせします。Aurora PostgreSQL Limitless Database を使用すると、データベースワークロードを複数の Aurora ライターインスタンスに分散しながら、単一データベースとして使用する機能を維持することで、書き込みスループットとストレージに関する既存の Aurora の制限を超えて拡張できます。

AWS re:Invent 2023 で Aurora PostgreSQL Limitless Database をプレビューしたとき、DB シャードグループ内の複数のデータベースノード (ワークロードに基づいてスケールするルーターまたはシャード) で構成される 2 層アーキテクチャを使用していることを説明しました。

  • ルーター – クライアントからの SQL 接続を受け入れ、SQL コマンドをシャードに送信し、システム全体の一貫性を維持して、結果をクライアントに返すノード。
  • シャード – テーブルのサブセットとデータの完全なコピーを保存し、ルーターからのクエリを受け付けるノード。

データを含むテーブルには、シャード、参照、標準の 3 種類があります。

  • シャードテーブル – このテーブルは複数のシャードに分散されています。データは、シャードキーと呼ばれるテーブル内の指定された列の値に基づいてシャード間で分割されます。アプリケーションの中で最も大きく、最も入出力量の多いテーブルをスケールするときに役立ちます。
  • 参照テーブル – このテーブルでは、すべてのシャードのデータを完全にコピーするため、不要なデータ移動がなくなり、結合クエリをより高速に実行できます。製品カタログや郵便番号など、あまり変更されない参照データによく使用されます。
  • 標準テーブル – これらのテーブルは通常の Aurora PostgreSQL テーブルに似ています。標準テーブルはすべて 1 つのシャードにまとめられるため、不必要なデータ移動がなくなり、結合クエリをより高速に実行できます。標準テーブルから、シャードテーブルと参照テーブルを作成できます。

DB シャードグループ、シャードテーブル、参照テーブルを作成したら、大量のデータを Aurora PostgreSQL Limitless Database にロードし、標準の PostgreSQL クエリを使用して、それらのテーブルのデータをクエリできます。詳細については、Amazon Aurora ユーザーガイドの「Limitless Database アーキテクチャ」を参照してください。

Aurora PostgreSQL Limitless Database の利用開始
AWS マネジメントコンソールAWS コマンドラインインターフェイス (AWS CLI) から始めて、Aurora PostgreSQL Limitless Database を使用する新しい DB クラスターを作成し、クラスターに DB シャードグループを追加して、データをクエリすることができます。

1.Aurora PostgreSQL Limitless Database クラスターの作成
Amazon Relational Database Service (Amazon RDS) コンソールを開き、[データベースを作成] を選択します。エンジンオプションでは、[Aurora (PostgreSQL 互換)][Aurora PostgreSQL と Limitless Database (PostgreSQL 16.4 互換)] を選択します。

Aurora Limitless Database には、DB シャードグループの名前と、すべてのルーターとシャードの Aurora キャパシティユニット (ACU) によって測定された最小容量および最大容量の値を入力します。DB シャードグループ内のルーターとシャードの初期数は、この最大容量によって決まります。Aurora PostgreSQL Limitless Database は、現在の使用率が低すぎて負荷を処理できない場合、ノードをより高い容量にスケールアップします。現在の容量が必要以上に多い場合は、ノードをより低い容量にスケールダウンします。

DB シャードグループのデプロイでは、DB シャードグループのスタンバイ (コンピューティングの冗長性なし) を作成するか、別のアベイラビリティーゾーンに 1 つのコンピューティングスタンバイを作成するか、2 つの異なるアベイラビリティーゾーンに 2 つのコンピューティングスタンバイを作成するかを選択します。

残りの DB 設定を好きなように設定し、[データベースを作成] を選択します。DB シャードグループが作成されると、データベースページに表示されます。

DB シャードグループの接続、再起動、削除、または容量の変更、シャードの分割、DB シャードグループへのルーターの追加を実行できます。詳細については、Amazon Aurora ユーザーガイドの「DB シャードグループの使用」を参照してください。

2.Aurora PostgreSQL Limitless Database テーブルの作成
前述のように、Aurora PostgreSQL Limitless Database には、シャード、参照、標準の 3 つのテーブルタイプがあります。標準テーブルをシャードテーブルまたは参照テーブルに変換して、既存の標準テーブルを分散または複製したり、新しいシャードテーブルや参照テーブルを作成したりできます。

テーブル作成モードを設定すると、変数を使用してシャードテーブルと参照テーブルを作成できます。作成したテーブルは、別のモードを設定するまでこのモードを使用します。次の例は、これらの変数を使用してシャードテーブルと参照テーブルを作成する方法を示しています。

例えば、item_id 列と item_cat 列で構成されるシャードキーを使用して、items という名前のシャードテーブルを作成するとします。

SET rds_aurora.limitless_create_table_mode='sharded';
SET rds_aurora.limitless_create_table_shard_key='{"item_id", "item_cat"}';
CREATE TABLE items(item_id int, item_cat varchar, val int, item text);

次に、item_id 列と item_cat 列で構成されるシャードキーを使用した item_description という名前のシャードテーブルを作成し、それを items テーブルとコロケーションします。

SET rds_aurora.limitless_create_table_collocate_with='items';
CREATE TABLE item_description(item_id int, item_cat varchar, color_id int, ...);

colors という名前の参照テーブルを作成することもできます。

SET rds_aurora.limitless_create_table_mode='reference';
CREATE TABLE colors(color_id int primary key, color varchar);

Limitless Database テーブルに関する情報は、rds_aurora.limitless_tables ビューを使用して確認できます。このビューには、テーブルとそのタイプに関する情報が含まれています。

postgres_limitless=> SELECT * FROM rds_aurora.limitless_tables;

 table_gid | local_oid | schema_name | table_name  | table_status | table_type  | distribution_key
-----------+-----------+-------------+-------------+--------------+-------------+------------------
         1 |     18797 | public      | items       | active       | sharded     | HASH (item_id, item_cat)
         2 |     18641 | public      | colors      | active       | reference   | 

(2 rows)

標準テーブルをシャードテーブルまたは参照テーブルに変換できます。変換中、データは標準テーブルから分散テーブルに移動され、ソース標準テーブルは削除されます。詳細については、Amazon Aurora ユーザーガイドの「標準テーブルから無制限テーブルへの変換」を参照してください。

3.Aurora PostgreSQL Limitless Database テーブルのクエリ
Aurora PostgreSQL Limitless Database は、クエリ用の PostgreSQL 構文と互換性があります。psql または PostgreSQL で動作するその他の接続ユーティリティを使用して、Limitless Database をクエリできます。テーブルをクエリする前に、COPY コマンドまたは データロードユーティリティを使用して、Aurora Limitless Database テーブルにデータをロードできます。

クエリを実行するには、「Aurora Limitless Database DB クラスターへの接続」に示されているように、クラスターエンドポイントに接続します。PostgreSQL SELECT クエリはすべて、クライアントがクエリを送信する先のルーターと、データが保存されているシャードで実行されます。

高度な並列処理を実現するために、Aurora PostgreSQL Limitless Database では、シングルシャードクエリと分散クエリという 2 つのクエリ方法を使用しています。これらの方法で、クエリがシングルシャードか分散クエリかを判断し、それに応じてクエリを処理します。

  • シングルシャードクエリ – クエリに必要なすべてのデータが 1 つのシャードに存在するクエリ。生成された結果セットを含め、すべての操作を 1 つのシャードで実行できます。ルーターのクエリプランナーがこのようなクエリに遭遇すると、プランナーは対応するシャードに SQL クエリ全体を送信します。
  • 分散クエリ – ルーターと複数のシャードで実行されるクエリ。クエリーはルーターの 1 つで受信されます。ルーターは、参加しているシャードに送信される分散トランザクションを作成して管理します。シャードはルーターから提供されたコンテキストを使用してローカルトランザクションを作成し、クエリが実行されます。

シングルシャードクエリの例では、次のパラメータを使用して EXPLAIN コマンドの出力を設定します。

postgres_limitless=> SET rds_aurora.limitless_explain_options = shard_plans, single_shard_optimization;
SET

postgres_limitless=> EXPLAIN SELECT * FROM items WHERE item_id = 25;

                     QUERY PLAN
--------------------------------------------------------------
 Foreign Scan  (cost=100.00..101.00 rows=100 width=0)
   Remote Plans from Shard postgres_s4:
         Index Scan using items_ts00287_id_idx on items_ts00287 items_fs00003  (cost=0.14..8.16 rows=1 width=15)
           Index Cond: (id = 25)
 Single Shard Optimized
(5 rows) 

EXPLAIN コマンドの詳細については、PostgreSQL ドキュメントの「EXPLAIN」を参照してください。

分散クエリの例として、BookPen という名前の新しい項目を、items テーブルに挿入できます。

postgres_limitless=> INSERT INTO items(item_name)VALUES ('Book'),('Pen')

これにより、2 つのシャードで分散トランザクションが行われます。クエリを実行すると、ルーターはスナップショット時間を設定し、そのステートメントを BookPen を所有するシャードに渡します。ルーターは両方のシャードにわたってアトミックコミットを調整し、その結果をクライアントに返します。

Aurora PostgreSQL Limitless Database 全体の PostgreSQL ログ内のクエリをトレースして関連付けるツールである分散クエリトレーシングを使用できます。詳細については、Amazon Aurora ユーザーガイドの「Limitless Database のクエリ」を参照してください。

一部の SQL コマンドはサポートされていません。詳細については、Amazon Aurora ユーザーガイドの「Aurora Limitless Database リファレンス」を参照してください。

知っておくべきこと
この機能について知っておきたい事柄には、次のようなものがあります。

  • コンピューティング – DB クラスターあたり 1 つの DB シャードグループのみを持つことができ、DB シャードグループの最大容量を 16~6,144 ACU に設定できます。6,144 個以上の ACU が必要な場合は、お問い合わせください。ルーターとシャードの初期数は、DB シャードグループの作成時に設定した最大容量によって決まります。DB シャードグループの最大容量を変更しても、ルーターとシャードの数は変わりません。詳細については、Amazon Aurora ユーザーガイドの「ルーターとシャードの数の表」を参照してください。
  • ストレージ – Aurora PostgreSQL Limitless Database は Amazon Aurora I/O-Optimized DB クラスターストレージ設定のみをサポートします。各シャードの最大容量は 128 TiB です。参照テーブルでの DB シャードグループ全体のサイズ制限は 32 TiB です。データをクリーンアップしてストレージスペースを再利用するには、PostgreSQL のバキュームユーティリティを使用できます。
  • モニタリングAmazon CloudWatchAmazon CloudWatch Logs、または Performance Insights を使用して、Aurora PostgreSQL Limitless Database をモニタリングできます。また、モニタリングや診断に使用できる Aurora PostgreSQL Limitless Database 用の新しい統計関数やビュー待機イベントもあります。

今すぐご利用いただけます
Amazon Aurora PostgreSQL Limitless Database は、PostgreSQL 16.4 との互換性を使用して、米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン)、アジアパシフィック (香港)、アジアパシフィック (ムンバイ)、アジアパシフィック (シンガポール)、アジアパシフィック (シドニー)、アジアパシフィック (東京)、欧州 (フランクフルト)、欧州 (アイルランド)、欧州 (ストックホルム) の AWS リージョンでご利用いただけるようになりました。

Amazon Aurora コンソールで Aurora PostgreSQL Limitless Database を試してみてください。詳細については、「Amazon Aurora ユーザーガイド」をご覧ください。また、AWS re:Post for Amazon Aurora 宛てに、または通常の AWS サポートの連絡先を通じて、ぜひフィードバックをお寄せください。

Channy

原文はこちらです。