Amazon Web Services 한국 블로그
Amazon Aurora PostgreSQL Limitless Database 정식 출시
Amazon Aurora의 새로운 서버리스 수평적 스케일링(샤딩) 기능인 Amazon Aurora PostgreSQL Limitless Database의 정식 출시를 발표합니다. Aurora PostgreSQL Limitless Database를 사용하면 데이터베이스 워크로드를 단일 데이터베이스로 사용하는 기능을 유지하면서 여러 Aurora 작성기 인스턴스에 데이터베이스 워크로드를 분산하여 쓰기 처리량 및 스토리지에 대한 기존 Aurora 제한을 초과하여 규모 조정할 수 있습니다.
AWS re:Invent 2023에서 Aurora PostgreSQL Limitless Database를 미리 살펴보며, 이 기능은 DB 샤드 그룹의 여러 데이터베이스 노드(워크로드에 따라 규모를 조정할 수 있는 라우터 또는 샤드)로 구성되는 2계층 아키텍처를 사용한다고 설명드렸습니다.
- 라우터 – 클라이언트의 SQL 연결을 수락하고, 샤드에 SQL 명령을 전송하고, 시스템 전반의 일관성을 유지하고, 결과를 클라이언트에 반환하는 노드입니다.
- 샤드 – 테이블의 하위 집합과 데이터의 전체 복사본을 저장하는 노드로, 라우터의 쿼리를 수락합니다.
데이터를 포함하는 테이블에는 샤딩된 테이블, 참조 테이블, 표준 테이블이라는 3가지 유형이 있습니다.
- 샤딩된 테이블 – 이 테이블은 여러 샤드에 분산되어 있습니다. 데이터는 샤드 키라고 하는 테이블의 지정된 열 값을 기반으로 샤드 간에 분할됩니다. 애플리케이션에서 가장 규모가 크고 가장 I/O 집약적인 테이블을 규모 조정하는 데 유용합니다.
- 참조 테이블 – 이 테이블은 모든 샤드에서 전체 데이터를 복사합니다. 따라서 불필요한 데이터 이동을 제거하여 조인 쿼리가 더 빠르게 작동할 수 있습니다. 일반적으로 제품 카탈로그 및 우편 번호와 같이 자주 수정되지 않는 참조 데이터에 사용됩니다.
- 표준 테이블 – 이 테이블은 일반 Aurora PostgreSQL 테이블과 같습니다. 표준 테이블은 모두 단일 샤드에 함께 배치되므로 불필요한 데이터 이동을 제거하여 조인 쿼리가 더 빠르게 작동할 수 있습니다. 표준 테이블에서 샤딩된 테이블과 참조 테이블을 생성할 수 있습니다.
DB 샤드 그룹과 샤딩된 테이블 및 참조 테이블을 생성한 후에는 대량의 데이터를 Aurora PostgreSQL Limitless Database에 로드하고 표준 PostgreSQL 쿼리를 사용하여 해당 테이블의 데이터를 쿼리할 수 있습니다. 자세히 알아보려면 Amazon Aurora 사용 설명서의 Limitless Database architecture를 참조하세요.
Aurora PostgreSQL Limitless Database 시작하기
AWS Management Console 및 AWS Command Line Interface(AWS CLI)에서 시작하여 Aurora PostgreSQL Limitless Database를 사용하는 새 DB 클러스터를 생성하고, 클러스터에 DB 샤드 그룹을 추가하고, 데이터를 쿼리할 수 있습니다.
1. Aurora PostgreSQL Limitless Database 클러스터 생성
Amazon Relational Database Service(Amazon RDS) 콘솔을 열고 Create database를 선택합니다. Engine options에서 Aurora (PostgreSQL Compatible) 및 Aurora PostgreSQL with Limitless Database (Compatible with PostgreSQL 16.4)를 선택합니다.
Aurora Limitless Database에서 DB 샤드 그룹의 이름과 모든 라우터 및 샤드에서 Aurora 용량 단위(ACU)로 측정한 최소 및 최대 용량 값을 입력합니다. DB 샤드 그룹의 초기 라우터 및 샤드 수는 이 최대 용량에 따라 결정됩니다. Aurora PostgreSQL Limitless Database는 현재 용량이 너무 낮아 로드를 처리할 수 없을 때 노드를 더 큰 용량으로 규모 조정합니다. 현재 용량이 필요 이상으로 높으면 노드를 더 낮은 용량으로 규모 조정합니다.
DB shard group deployment에서 DB 샤드 그룹에 대한 스탠바이를 생성할지 선택합니다(컴퓨팅 이중화 없음, 다른 가용 영역에 컴퓨팅 스탠바이 1개, 서로 다른 가용 영역 2개에 컴퓨팅 스탠바이 2개).
나머지 DB 설정을 원하는 대로 설정하고 Create database를 선택합니다. DB 샤드 그룹이 생성되면 Databases 페이지에 표시됩니다.
DB 샤드 그룹을 연결, 재부팅 또는 삭제하거나, 용량을 변경하거나, 샤드를 분할하거나, DB 샤드 그룹에 라우터를 추가할 수 있습니다. 자세히 알아보려면 Amazon Aurora 사용 설명서의 Working with DB shard groups를 참조하세요.
2. Aurora PostgreSQL Limitless Database 테이블 생성
앞서 언급한 대로 Aurora PostgreSQL Limitless Database에는 샤딩된 테이블, 참조 테이블 및 표준 테이블의 3가지 테이블 유형이 있습니다. 표준 테이블을 샤딩된 테이블 또는 참조 테이블로 변환하여 기존 표준 테이블을 배포 또는 복제하거나 새 샤딩된 테이블 또는 참조 테이블을 생성할 수 있습니다.
테이블 생성 모드를 설정하여 변수를 사용하여 샤드 테이블 및 참조 테이블을 생성할 수 있습니다. 생성하는 테이블은 다른 모드를 설정할 때까지 이 모드를 사용합니다. 다음 예제는 이러한 변수를 사용하여 샤딩된 테이블 및 참조 테이블을 생성하는 방법을 보여줍니다.
예를 들어 item_id
및 item_cat
열로 구성된 샤드 키를 사용하여 items
라는 샤딩된 테이블을 생성합니다.
SET rds_aurora.limitless_create_table_mode='sharded';
SET rds_aurora.limitless_create_table_shard_key='{"item_id", "item_cat"}';
CREATE TABLE items(item_id int, item_cat varchar, val int, item text);
이제 item_id
및 item_cat
열로 구성된 샤드 키를 사용하여 item_description
이라는 샤딩된 테이블을 생성하고 items
테이블과 공동 배치합니다.
SET rds_aurora.limitless_create_table_collocate_with='items';
CREATE TABLE item_description(item_id int, item_cat varchar, color_id int, ...);
colors
라는 참조 테이블을 생성할 수도 있습니다.
SET rds_aurora.limitless_create_table_mode='reference';
CREATE TABLE colors(color_id int primary key, color varchar);
테이블 및 테이블 유형에 대한 정보가 포함된 rds_aurora.limitless_tables
뷰를 사용하여 Limitless Database 테이블에 대한 정보를 확인할 수 있습니다.
postgres_limitless=> SELECT * FROM rds_aurora.limitless_tables;
table_gid | local_oid | schema_name | table_name | table_status | table_type | distribution_key
-----------+-----------+-------------+-------------+--------------+-------------+------------------
1 | 18797 | public | items | active | sharded | HASH (item_id, item_cat)
2 | 18641 | public | colors | active | reference |
(2 rows)
표준 테이블을 샤딩된 테이블 또는 참조 테이블로 변환할 수 있습니다. 변환 중에 데이터가 표준 테이블에서 분산 테이블로 이동한 다음 소스 표준 테이블이 삭제됩니다. 자세히 알아보려면 Amazon Aurora 사용 설명서의 Converting standard tables to limitless tables를 참조하세요.
3. Aurora PostgreSQL Limitless Database 테이블 쿼리
Aurora PostgreSQL Limitless Database는 쿼리에 대한 PostgreSQL 구문과 호환됩니다. psql
또는 PostgreSQL과 함께 작동하는 다른 연결 유틸리티를 사용하여 Limitless Database를 쿼리할 수 있습니다. 테이블을 쿼리하기 전에 COPY
명령을 사용하거나 데이터 로드 유틸리티를 사용하여 Aurora Limitless Database 테이블에 데이터를 로드할 수 있습니다.
쿼리를 실행하려면 Connecting to your Aurora Limitless Database DB cluster에 설명된 대로 클러스터 엔드포인트에 연결합니다. 모든 PostgreSQL SELECT
쿼리는 클라이언트가 쿼리를 전송하는 라우터와 데이터가 위치한 샤드에서 수행됩니다.
고도의 병렬 처리를 위해 Aurora PostgreSQL Limitless Database는 단일 샤드 쿼리와 분산 쿼리라는 두 가지 쿼리 방법을 사용하며, 쿼리가 단일 샤드인지 분산 쿼리인지를 결정하고 그에 따라 쿼리를 처리합니다.
- 단일 샤드 쿼리 – 쿼리에 필요한 모든 데이터가 하나의 샤드에 있는 쿼리입니다. 생성된 모든 결과 세트를 포함하여 전체 작업을 하나의 샤드에서 수행할 수 있습니다. 라우터의 쿼리 플래너가 이와 같은 쿼리를 발견하면 플래너는 전체 SQL 쿼리를 해당 샤드로 전송합니다.
- 분산 쿼리 – 하나의 라우터와 둘 이상의 샤드에서 실행되는 쿼리입니다. 라우터 중 하나가 쿼리를 수신합니다. 라우터는 분산 트랜잭션을 생성 및 관리하며, 이 트랜잭션은 참여 샤드로 전송됩니다. 샤드는 라우터에서 제공한 컨텍스트를 사용하여 로컬 트랜잭션을 생성하고, 쿼리가 실행됩니다.
단일 샤드 쿼리 예제에서는 다음 파라미터를 사용하여 EXPLAIN
명령의 출력을 구성합니다.
postgres_limitless=> SET rds_aurora.limitless_explain_options = shard_plans, single_shard_optimization;
SET
postgres_limitless=> EXPLAIN SELECT * FROM items WHERE item_id = 25;
QUERY PLAN
--------------------------------------------------------------
Foreign Scan (cost=100.00..101.00 rows=100 width=0)
Remote Plans from Shard postgres_s4:
Index Scan using items_ts00287_id_idx on items_ts00287 items_fs00003 (cost=0.14..8.16 rows=1 width=15)
Index Cond: (id = 25)
Single Shard Optimized
(5 rows)
EXPLAIN 명령에 대해 자세히 알아보려면 PostgreSQL 설명서의 EXPLAIN을 참조하세요.
분산 쿼리 예제에서는 Book
및 Pen
이라는 새 항목을 items
테이블에 삽입할 수 있습니다.
postgres_limitless=> INSERT INTO items(item_name)VALUES ('Book'),('Pen')
이렇게 하면 두 샤드에서 분산 트랜잭션이 이루어집니다. 쿼리가 실행되면 라우터는 스냅샷 시간을 설정하고 Book
및 Pen
을 소유한 샤드에 명령문을 전달합니다. 라우터는 두 샤드에서 원자적 커밋을 조정하고 결과를 클라이언트에 반환합니다.
분산 쿼리 추적을 사용하여 Aurora PostgreSQL Limitless Database에서 PostgreSQL 로그의 쿼리를 추적하고 상관 관계를 파악할 수 있습니다. 자세히 알아보려면 Amazon Aurora 사용 설명서의 Querying Limitless Database를 참조하세요.
일부 SQL 명령은 지원되지 않습니다. 자세한 내용은 Amazon Aurora 사용 설명서의 Aurora Limitless Database reference를 참조하세요.
알아야 할 사항
다음은 이 기능에 대해 알아두어야 할 몇 가지 사항입니다.
- 컴퓨팅 – DB 클러스터당 하나의 DB 샤드 그룹만 사용할 수 있으며 DB 샤드 그룹의 최대 용량을 16~6,144개 ACU로 설정할 수 있습니다. 6,144개 이상의 ACU가 필요한 경우 AWS에 문의하세요. 초기 라우터 및 샤드 수는 DB 샤드 그룹을 생성할 때 설정한 최대 용량에 따라 결정됩니다. DB 샤드 그룹의 최대 용량을 수정하면 라우터 및 샤드 수는 변경되지 않습니다. 자세히 알아보려면 Amazon Aurora 사용 설명서의 라우터 및 샤드 수 표를 참조하세요.
- 스토리지 – Aurora PostgreSQL Limitless Database는 Amazon Aurora I/O-Optimized DB 클러스터 스토리지 구성만 지원합니다. 각 샤드의 최대 용량은 128TiB입니다. 전체 DB 샤드 그룹에 대한 참조 테이블의 크기 제한은 32TiB입니다. 데이터를 정리하여 스토리지 공간을 확보하려면 PostgreSQL의 베큐밍 유틸리티를 사용할 수 있습니다.
- 모니터링 – Amazon CloudWatch, Amazon CloudWatch Logs 또는 Performance Insights를 사용하여 Aurora PostgreSQL Limitless Database를 모니터링할 수 있습니다. 모니터링 및 진단에 사용할 수 있는 Aurora PostgreSQL Limitless Database에 대한 새로운 통계 함수 및 뷰와 대기 이벤트도 있습니다.
정식 출시
Amazon Aurora PostgreSQL Limitless Database는 현재 AWS 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오리건), 아시아 태평양(홍콩), 아시아 태평양(싱가포르), 아시아 태평양(시드니), 아시아 태평양(도쿄), 유럽(프랑크푸르트), 유럽(아일랜드) 및 유럽(스톡홀름) 리전에서 PostgreSQL 16.4와 호환하여 사용 가능합니다.
Amazon Aurora 콘솔에서 Aurora PostgreSQL Limitless Database를 사용해 보세요. 자세한 내용은 Amazon Aurora 사용자 설명서를 참조하고, Amazon Aurora용 AWS re:Post 또는 평소 이용하는 AWS Support 담당자를 통해 피드백을 보내주세요.
– Channy