Aurora PostgreSQL Limitless Database の DML 制限とその他の情報 - Amazon Aurora

Aurora PostgreSQL Limitless Database の DML 制限とその他の情報

以下のトピックでは、Aurora PostgreSQL Limitless Database での DML コマンドとクエリ処理 SQL コマンドの制限や詳細について説明します。

ANALYZE

ANALYZE コマンドは、データベース内のテーブルの内容に関する統計を収集します。その後、クエリプランナーはこれらの統計を使用して、最も効率的なクエリの実行プランを決定します。詳細については、「PostgreSQL ドキュメント」の「ANALYZE」を参照してください。

Aurora PostgreSQL Limitless Database では、ANALYZE コマンドは実行時にすべてのルーターとシャードのテーブル統計を収集します。

ANALYZE の実行中にすべてのルーターで統計情報が計算されないように、テーブル統計は 1 つのルーターで計算され、その後ピアルーターにコピーされます。

CLUSTER

CLUSTER コマンドは、インデックスに基づいてテーブルの順序を物理的に変更します。インデックスはテーブルで既に定義されている必要があります。Aurora PostgreSQL Limitless Database では、クラスタリングは各シャードに存在するインデックスの一部に対してローカルです。

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

EXPLAIN

次のパラメータを使用して、EXPLAIN コマンドからの出力を設定します。

  • rds_aurora.limitless_explain_optionsEXPLAIN 出力に含める内容。デフォルト値は single_shard_optimization です。プランが単一シャード最適化かどうかが表示されますが、シャードプランは含まれません。

この例では、EXPLAIN 出力にはシャードからのプランは表示されません。

postgres_limitless=> EXPLAIN SELECT * FROM employees where id =25; QUERY PLAN ------------------------------------------------------ Foreign Scan (cost=100.00..101.00 rows=100 width=0) Single Shard Optimized (2 rows)

ここで、shard_planssingle_shard_optimization を含めるように rds_aurora.limitless_explain_options を設定します。ルーターとシャードの両方で、ステートメントの実行プランを確認できます。さらに、enable_seqscan パラメータを無効にして、シャードレイヤーでインデックススキャンが使用されるようにします。

postgres_limitless=> SET rds_aurora.limitless_explain_options = shard_plans, single_shard_optimization; SET postgres_limitless=> SET enable_seqscan = OFF; SET postgres_limitless=> EXPLAIN SELECT * FROM employees WHERE id = 25; QUERY PLAN -------------------------------------------------------------------------------------------------------------------------- Foreign Scan (cost=100.00..101.00 rows=100 width=0) Remote Plans from Shard postgres_s4: Index Scan using employees_ts00287_id_idx on employees_ts00287 employees_fs00003 (cost=0.14..8.16 rows=1 width=15) Index Cond: (id = 25) Single Shard Optimized (5 rows)

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

INSERT

ほとんどの INSERT コマンドは、Aurora PostgreSQL Limitless Database でサポートされています。

PostgreSQL には明示的な UPSERT コマンドはありませんが、INSERT ... ON CONFLICT ステートメントをサポートしています。

競合アクションにサブクエリまたは可変関数が含まれている場合、INSERT ... ON CONFLICT はサポートされません。

-- RANDOM is a mutable function. INSERT INTO sharded_table VALUES (1, 100) ON CONFLICT (id) DO UPDATE SET other_id = RANDOM(); ERROR: Aurora Limitless Tables doesn't support pushdown-unsafe functions with DO UPDATE clauses.

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

UPDATE

シャードキーの更新はサポートされていません。例えば、シャードキー customer_id を持つ customers というシャードテーブルがあるとします。次の DML ステートメントはエラーを引き起こします。

postgres_limitless=> UPDATE customers SET customer_id = 11 WHERE customer_id =1; ERROR: Shard key column update is not supported postgres_limitless=> UPDATE customers SET customer_id = 11 WHERE customer_name='abc'; ERROR: Shard key column update is not supported

シャードキーを更新するには、まずシャードキーを持つ行を DELETE し、次に更新されたシャードキー値を持つ新しい行を INSERT する必要があります。

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

VACUUM

シャードテーブルとリファレンステーブルの両方でバキュームを実行できます。Aurora PostgreSQL Limitless Database では、次の VACUUM 関数が完全にサポートされています。

  • VACUUM

  • ANALYZE

  • DISABLE_PAGE_SKIPPING

  • FREEZE

  • FULL

  • INDEX_CLEANUP

  • PARALLEL

  • PROCESS_TOAST

  • TRUNCATE

  • VERBOSE

Aurora PostgreSQL Limitless Database の VACUUM には、次の制限があります。

VACUUM コマンドの詳細については、PostgreSQL ドキュメントの「VACUUM」を参照してください。Aurora PostgreSQL Limitless Database でのバキューム処理の仕組みの詳細については、「バキューム処理によるストレージ容量の再利用」を参照してください。