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