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_options
–EXPLAIN
出力に含める内容。デフォルト値は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_plans
と single_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
-
DISABLE_PAGE_SKIPPING
-
FREEZE
-
FULL
-
INDEX_CLEANUP
-
PARALLEL
-
PROCESS_TOAST
-
TRUNCATE
-
VERBOSE
Aurora PostgreSQL Limitless Database の VACUUM
には、次の制限があります。
-
pg_visibility_map
拡張機能はサポートされていません。 -
pg_stat_all_indexes
ビューで未使用のインデックスをチェックすることはサポートされていません。 -
pg_stat_user_indexes
、pg_class 、pg_stats の統合ビューは実装されていません。
VACUUM
コマンドの詳細については、PostgreSQL ドキュメントの「VACUUM