Aurora PostgreSQL Limitless Database에 대한 DML 제한 사항 및 기타 정보
다음 주제에서는 Aurora PostgreSQL Limitless Database의 DML 및 쿼리 처리 SQL 명령에 대한 제한 사항을 설명하거나 자세한 정보를 제공합니다.
ANALYZE
ANALYZE
명령은 데이터베이스의 테이블 내용에 대한 통계를 수집합니다. 이후 쿼리 플래너는 이러한 통계를 사용하여 쿼리에 대한 가장 효율적인 실행 계획을 결정하는 데 도움을 줍니다. 자세한 내용은 PostgreSQL 설명서의 ANALYZE
Aurora PostgreSQL Limitless Database에서 ANALYZE
명령은 실행 시 모든 라우터 및 샤드에 대한 테이블 통계를 수집합니다.
ANALYZE
실행 중 모든 라우터에 대한 통계 계산을 방지하기 위해 테이블 통계는 라우터 중 하나에 대해 계산된 다음 피어 라우터에 복사됩니다.
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
샤딩된 테이블과 참조 테이블 모두에 vacuum 작업을 수행할 수 있습니다. 다음 VACUUM
함수는 Aurora PostgreSQL Limitless Database에서 완전히 지원됩니다.
-
VACUUM
-
DISABLE_PAGE_SKIPPING
-
FREEZE
-
FULL
-
INDEX_CLEANUP
-
PARALLEL
-
PROCESS_TOAST
-
TRUNCATE
-
상세 표시
Aurora PostgreSQL Limitless Database에서 VACUUM
에는 다음과 같은 제한 사항이 있습니다.
-
pg_visibility_map
확장은 지원되지 않습니다. -
pg_stat_all_indexes
뷰를 사용하여 미사용 인덱스를 확인하는 것은 지원되지 않습니다. -
pg_stat_user_indexes
, pg_class 및 pg_stats 에 대한 통합 뷰는 구현되지 않습니다.
VACUUM
명령에 대한 자세한 내용은 PostgreSQL 설명서의 VACUUM