구글 PS2팀 윤영훈
1. AlloyDB
AlloyDB는 구글 클라우드에서 제공하는 완전히 관리형 PostgreSQL 호환 데이터베이스 서비스로 ACID – atomicity, consistency, isolation, and durability – 호환 트랜잭션을 지원합니다.
AlloyDB의 성능은 아래와 같이 소개되고 있는데, 해당 성능을 구성되게 하는 AlloyDB의 특징을 설명하고, 테스트 환경을 구성하여 쿼리 실행 성능을 비교 측정합니다.
- 트랜잭션 워크로드에서 표준 PostgreSQL보다 4배 빠른 속도.
- 분석 워크로드에서 표준 PostgreSQL보다 최대 100배 빠른 속도.
2. Intelligent, database-aware storage
AlloyDB는 컴퓨팅과 스토리지를 분리하여 I/O 병목 현상을 줄이고, LPS(Log processing service)를 사용하여 많은 데이터베이스 작업을 스토리지 계층으로 오프로드합니다.
LPS(Log processing service)는 WAL 레코드를 처리하고 데이터베이스 블록을 생성하는 AlloyDB의 내부 서비스입니다. 컴퓨팅 레이어는 WAL 레코드를 스토리지 계층에 전달하기만 하여 블록 쓰기는 필요하지 않습니다.
3. Columnar Engine
AlloyDB의 Columnar Engine 기능을 활성화하면, row 기반의 저장 데이터를 ML/AI 기반으로 column 형식 데이터로 자동으로 구성합니다. 최적의 table/column을 지능적으로 선택하고 이 데이터를 메모리에 자동으로 유지합니다. 성능 비교를 위해서 Columnar Engine을 활성화하는 경우 먼저 ‘warm-up’ 쿼리를 실행한 후 성능을 측정합니다.
Columnar Engine은 데이터 스캔 결과를 구체화하지 않고, 관련된 column에서 직접 집계 작업을 수행하며, 스캔속도를 높이기 위해서 최소 및 최대 값과 같은 column별 메타데이터를 활용하여 알고리즘을 최적화합니다.
Columnar Engine을 활성화된 상태라면, 쿼리의 실행 계획에서 ‘columnar scan’이라고 표시된 내용을 확인할 수 있습니다.
- Columnar Engine 비활성화 상태
- Columnar Engine 활성화 상태
4. 성능 비교
성능 비교를 위하여 18,608,748개의 row를 포함한 5GB 정도의 데이터를 구글 클라우드의 Cloud SQL, Alloy DB, Alloy DB + Columnar Engine, BigQuery 서비스에 동일하게 구성합니다. 각 데이터베이스에서 해당 데이터를 조회 및 집계하는, 동일한 쿼리를 실행하여 처리시간을 비교합니다.
각 데이터베이스에서 동일한 쿼리를 실행한 결과는 아래와 같습니다.
서비스 | Cloud SQL | Alloy DB | Alloy DB + Columnar Engine | BigQuery |
---|---|---|---|---|
실행시간(초) | 89 | 57 | 29 | 7 |
5. 결과 분석
쿼리 성능의 비교 결과에서 처리 속도가 가장 우수한 데이터베이스는 BigQuery이지만, BigQuery는 데이터 스캔 크기에 따라 조회비용이 추가로 과금되기 때문에 조회 빈도가 높은 경우 BigQuery 비용이 과도하게 발생할 수 있음을 유의해야 합니다.
또한 Cloud SQL과 AlloyDB의 비용을 비교하는 경우, 컴퓨팅 리소스 및 스토리지 조건에 따라 Cloud SQL이 비용면에서 효율적일 수 있습니다. 아래는 스토리지 용량이 클수록 Alloy DB를 선택하는 것이 비용이 절감되는 예시입니다.
출처
- Compare Analytical Queries Performance of AlloyDB with BigQuery
- AlloyDB under the hood: Replication gets closer to real-time
- Benchmarking for AlloyDB and how to do it
- AlloyDB for PostgreSQL under the hood: Intelligent, database-aware storage
- Configure the columnar engine
- Manage column store content using auto-columnarization