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 실행 중 모든 라우터에 대한 통계 계산을 방지하기 위해 테이블 통계는 라우터 중 하나에 대해 계산된 다음 피어 라우터에 복사됩니다.

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_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

샤딩된 테이블과 참조 테이블 모두에 vacuum 작업을 수행할 수 있습니다. 다음 VACUUM 함수는 Aurora PostgreSQL Limitless Database에서 완전히 지원됩니다.

  • VACUUM

  • ANALYZE

  • DISABLE_PAGE_SKIPPING

  • FREEZE

  • FULL

  • INDEX_CLEANUP

  • PARALLEL

  • PROCESS_TOAST

  • TRUNCATE

  • 상세 표시

Aurora PostgreSQL Limitless Database에서 VACUUM에는 다음과 같은 제한 사항이 있습니다.

VACUUM 명령에 대한 자세한 내용은 PostgreSQL 설명서의 VACUUM을 참조하세요. Aurora PostgreSQL Limitless Database에서 vacuum 작업이 작동하는 방법에 대한 자세한 내용은 Vacuum 작업을 통한 스토리지 공간 회수 섹션을 참조하세요.