[DB] 효율적인 쿼리 작성하기
Last updated
Last updated
Phase 1
Phase 2
배경 : Azure database for MySQL -> AWS Aurora로 이전
1. 개요:
Amazon Aurora는 MySQL 및 PostgreSQL 호환 관계형 데이터베이스 서비스입니다.
기존 데이터베이스의 성능과 가용성을 개선하면서도 비용 효율적인 서비스를 제공합니다.
2. 주요 특징:
호환성: MySQL 및 PostgreSQL과 호환되므로 기존 애플리케이션을 쉽게 마이그레이션할 수 있습니다.
고성능: 최대 5배(MySQL) 및 3배(PostgreSQL) 더 빠른 성능을 제공합니다.
고가용성: 여러 AZ(가용 영역)에 걸친 자동 복제와 자동 장애 조치 기능을 제공합니다.
자동 확장: 스토리지는 자동으로 확장되어 최대 128TB까지 지원합니다.
보안: 데이터 암호화, VPC 네트워킹, IAM 및 KMS 통합을 통한 강력한 보안을 제공합니다.
관리형 서비스: 자동 백업, 소프트웨어 패치 및 모니터링 기능을 제공합니다.
3. 사용 사례:
OLTP(Online Transaction Processing) 워크로드
웹 및 모바일 애플리케이션 백엔드
e-커머스 애플리케이션
비즈니스 애플리케이션
1. 개요:
Amazon Redshift는 페타바이트 규모의 데이터 분석을 위한 완전 관리형 데이터 웨어하우스 서비스입니다.
대규모 데이터 세트에 대한 고속 쿼리 성능을 제공합니다.
2. 주요 특징:
고성능: 대규모 데이터 세트에 대해 매우 빠른 쿼리 성능을 제공합니다. 컬럼형 저장 및 고급 쿼리 최적화 기술을 사용합니다.
확장성: 페타바이트 수준으로 확장 가능한 아키텍처를 제공합니다.
비용 효율성: 사용한 용량에 따라 비용이 청구되며, 스토리지와 컴퓨팅 리소스를 분리하여 관리할 수 있습니다.
통합: 다양한 BI(Business Intelligence) 도구 및 AWS 서비스와 통합됩니다.
보안: 데이터 암호화, VPC 네트워킹, IAM 및 KMS 통합을 통한 보안을 제공합니다.
관리형 서비스: 자동 백업, 스냅샷, 복구 기능 및 모니터링을 제공합니다.
3. 사용 사례:
OLAP(Online Analytical Processing) 워크로드
데이터 웨어하우징
비즈니스 인텔리전스(BI) 분석
빅 데이터 분석
목적:
AWS Aurora: 트랜잭션 처리(OLTP)용으로 설계된 관계형 데이터베이스.
AWS Redshift: 데이터 분석(OLAP) 및 데이터 웨어하우징 용도로 설계된 서비스.
데이터 구조:
AWS Aurora: 행 기반 저장(Row-based storage)을 사용하여 트랜잭션 속도를 최적화.
AWS Redshift: 컬럼 기반 저장(Columnar storage)을 사용하여 대규모 데이터 세트의 분석 쿼리 성능을 최적화.
확장성 및 성능:
AWS Aurora: 자동으로 확장되는 스토리지와 높은 I/O 처리 능력을 제공.
AWS Redshift: 클러스터 노드를 추가하여 확장할 수 있으며, 복잡한 쿼리에 대해 높은 성능을 제공.
비용:
AWS Aurora: 스토리지와 컴퓨팅 자원을 사용한 만큼 지불.
AWS Redshift: 스토리지와 컴퓨팅 자원을 분리하여 관리 및 비용 절감 가능.
사용 사례:
AWS Aurora: 실시간 트랜잭션 처리, 웹 애플리케이션 백엔드, e-커머스 애플리케이션.
AWS Redshift: 데이터 웨어하우징, 비즈니스 인텔리전스 분석, 빅 데이터 분석.
이러한 차이점을 바탕으로, 각 서비스의 특성과 용도에 맞춰 적절한 선택을 하는 것이 중요합니다. 예를 들어, 실시간 트랜잭션 처리와 같은 OLTP 워크로드에는 AWS Aurora가 적합하고, 대규모 데이터 분석과 같은 OLAP 워크로드에는 AWS Redshift가 더 적합합니다.
인덱스 사용 최적화:
적절한 인덱스 생성: 자주 조회되는 열이나 조인에 사용되는 열에 인덱스를 생성합니다.
불필요한 인덱스 제거: 너무 많은 인덱스는 쓰기 성능을 저하시킬 수 있으므로 불필요한 인덱스는 제거합니다.
인덱스 통계 업데이트: 최신 인덱스 통계 정보를 유지하여 쿼리 옵티마이저가 최적의 실행 계획을 선택할 수 있도록 합니다.
쿼리 구조 최적화:
단순한 쿼리 사용: 가능한 한 단순한 쿼리를 작성하여 쿼리 실행 계획이 복잡해지지 않도록 합니다.
서브쿼리 대신 조인 사용: 서브쿼리를 많이 사용하는 것보다 조인을 사용하여 성능을 개선합니다.
SELECT 절 최적화: 필요한 열만 선택하여 반환하는 데이터를 최소화합니다.
조인 최적화:
적절한 조인 순서: 데이터베이스가 작은 테이블부터 조인을 시작하도록 하여 메모리 사용을 최적화합니다.
조인 조건 명확히 하기: 조인 조건을 명확히 정의하여 불필요한 데이터 스캔을 줄입니다.
데이터 필터링 최적화:
WHERE 절 조건 최적화: 적절한 조건을 사용하여 데이터 필터링을 최적화합니다.
LIKE 연산자 최적화: 와일드카드 문자의 사용을 최소화하여 LIKE 연산자의 성능을 개선합니다.
집계 함수 최적화:
집계 연산 최소화: 필요한 경우에만 집계 함수를 사용하고, 가능한 경우 중간 결과를 캐싱하여 재사용합니다.
하드웨어 리소스 최적화:
병렬 처리 사용: 데이터베이스의 병렬 처리 기능을 활용하여 쿼리 성능을 향상시킵니다.
메모리 관리 최적화: 쿼리가 충분한 메모리를 사용할 수 있도록 설정을 조정합니다.
쿼리 실행 계획 분석:
실행 계획 확인: 데이터베이스의 쿼리 실행 계획을 분석하여 비효율적인 부분을 식별합니다.
쿼리 힌트 사용: 데이터베이스에 특정 실행 계획을 사용하도록 힌트를 제공하여 성능을 개선합니다.
데이터베이스 파티셔닝:
테이블 파티셔닝: 큰 테이블을 파티션으로 나누어 쿼리 성능을 향상시킵니다.
파티션 프루닝: 쿼리에서 필요한 파티션만 스캔하도록 쿼리를 작성하여 성능을 개선합니다.