Architecture
클러스터(Cluster)
데이터베이스에서 다중 데이터베이스와 다중 테이블이 조인될 때 사용되는 개념입니다.
주로 클러스터 키(Cluster Key)를 기반으로 한 데이터 구조를 나타냅니다.
클러스터 키를 공유하는 테이블들의 레코드(행)은 동시에 또는 근처의 데이터베이스 블록에 함께 저장되어 클러스터를 형성합니다.
이를 통해 클러스터 키 값에 의해 정렬된 테이블의 레코드들이 물리적으로 함께 저장되므로 해당 키 값을 기반으로 하는 조인 작업을 향상시킬 수 있습니다.
클러스터의 주요 특징
- 클러스터 키(Cluster Key)
- 클러스터를 형성하는 테이블들이나 인덱스들이 사용하는 공통의 키입니다.
- 이 키를 기반으로 레코드들이 물리적으로 클러스터됩니다.
- 클러스터 키는 클러스터의 부분들 간에 레코드를 서로 매치시키는데 사용됩니다.
- 클러스터 키에 의한 저장구조
- 클러스터 키 값을 공유하는 테이블들의 레코드는 동시에 또는 근처의 데이터베이스 블록에 함께 저장됩니다.
- 클러스터 키 값에 의해 정렬된 순서로 데이터가 저장되기 때문에, 해당 키 값을 사용한 검색 및 조인 작업이 효율적으로 수행됩니다.
- 클러스터 인덱스(Clustered Index)
- 클러스터 키에 대한 인덱스를 클러스터 인덱스라고 합니다.
- 클러스터 인덱스는 B-Tree 인덱스나 해시 테이블 등으로 구현됩니다.
- 클러스터 인덱스는 특정 키 값을 기반으로 클러스터를 형성하며, 이를 통해 클러스터 키를 사용한 검색이 빠르게 수행됩니다.
- 성능 향상 및 I/O 부하 감소
- 클러스터를 사용하면 클러스터 키 값을 기반으로 하는 테이블 간에 조인 작업이 향상되어 성능이 향상됩니다.
- 레코드들이 함께 저장되기 때문에 관련된 데이터에 대한 I/O 부하가 줄어들어 빠른 검색 및 읽기가 가능해집니다.
클러스터는 조인 연산이 많이 수행되는 시나리오에서 성능 향상을 제공해줍니다.
그러나 클러스터링의 장단점을 고려하여 적절하게 선택되어야합니다.
주로 읽기 작업이 많은 OLAP(Online Analytical Processing)환경에서 사용되며,
OLTP(Online Transaction Processing)환경에서는 주의가 필요합니다.
데이터베이스 클러스터의 조건을 만족하기 위한 요구조건
- 고가용성
- 병렬처리
- 성능향상
고가용성?
데이터베이스에서 가용성이란, 시스템이 사용 가능한 상태로 유지되는 정도를 나타내는 지표입니다.
데이터베이스가 동작하는 시간과 정지한 시간의 비율을 뜻하는데,
즉, 1년동안 몇분이 정지했음을 비율로 나타낸 것이 가용성입니다.
데이터베이스의 소프트웨어가 실행되는 물리적 컴퓨터인 하드웨어 등등의 문제가 생길 수 있습니다.
그러한 문제로 인하여 전체 시스템이 정지될 수 있는데, 그렇게 된다면 데이터베이스가 복구될 때 까지 서버가 정지되는 장애가 발생할 수 있습니다.
한 부분의 문제로 인해 전체 시스템이 정지되는 것을 SPOF(Single Point Of Failure)이라고 합니다.
이 문제를 해결하기 위해서는 고가용성 클러스터가 필요합니다.
데이터베이스 클러스터 시스템은 안정적인 데이터베이스 서비스를 위해서는 고가용성을 만족시킬 수 있어야합니다.
병렬처리(Parallel Processing)
여러 개의 처리 단위가 동시에 실행되어 작업을 가속화하고 성능을 향상시키는 기술입니다.
병렬처리는 대용량 데이터베이스 시스템에서 발생하는 작업 부하를 분산시키고, 데이터베이스 쿼리 처리 속도를 높이기 위해 사용됩니다.
다양한 형태의 병렬처리
- 테이블 분할(Table Partitioning)
- 데이터베이스 테이블을 논리적 또는 물리적으로 여러 부분으로 분할하고, 각 부분을 병렬로 처리함으로써 성능을 향상시킬 수 있습니다.
- 테이블의 행을 특정 기준에 따라 여러 파티션으로 나누고, 각 파티션을 별도의 쓰레드나 프로세스에서 처리하는 방식으로 병렬처리를 구현할 수 있습니다.
- 병렬 쿼리 실행(Parallel Query Execution)
- 하나의 쿼리를 여러 부분으로 나누어 각각의 부분을 병렬로 실행함으로써 전체 쿼리의 처리시간을 단축시킵니다.
- 데이터베이스 시스템은 여러 쿼리 실행 엔진을 동시에 활용하여 여러 쿼리를 동시에 처리할 수 있습니다.
- 인덱스 스캔 및 검색 병렬화
- 병렬 인덱스 스캔을 통해 여러 인덱스 부분을 동시에 검색하고, 병렬 검색을 통해 여러 검색 작업을 동시에 수행함으로써 쿼리의 실행 속도를 향상시킵니다.
- 데이터 로딩 및 업데이트 병렬화
- 대량의 데이터를 데이터베이스에 로드하거나 업데이트할 때, 여러 작업을 동시에 수행함으로써 높은 처리량을 달성할 수 있습니다.
- 데이터베이스 클러스터 병렬 처리
- 여러 대의 서버 또는 노드를 클러스터로 구성하여 병렬처리를 구현합니다. 각 노드는 독립적으로 일을 수행하며, 이러한 클러스터를 통해 작업을 분산시키고 처리 성능을 향상시킬 수 있습니다.
성능향상
- 인덱스 최적화
- 적절한 인덱스를 설계하고 유지하는 것이 데이터베이스 성능에 큰 영향을 미칩니다.
- WHERE 절에서 사용되는 컬럼에 인덱스를 생성하고, 쿼리의 패턴을 분석하여 효율적인 인덱스를 구축하는 것이 중요합니다.
- 쿼리 최적화
- 비효율적인 쿼리를 최적화하여 성능을 향상시킵니다.
- 쿼리 실행 계획을 분석하고, 필요한 경우에는 인덱스 힌트나 쿼리 리팩토링을 통해 최적화를 수행합니다.
- 테이블 분할 및 파티셔닝
- 대용량의 테이블을 분할하거나 파티셔닝하여 검색 및 조인 작업의 속도를 향상시킵니다.
- 특정 부분만 읽어오면 성능이 향상될 수 있습니다.
- 메모리 최적화
- 적절한 메모리를 할당하여 캐시를 최적화하면 디스크I/O를 줄일 수 있습니다.
- 캐시를 이용해 자주 사용되는 데이터를 메모리에 보관함으로써 응답시간을 단축할 수 있습니다.
- 쿼리 캐싱
- 쿼리 결과를 캐시하여 반복적으로 실행되는 쿼리에 대한 성능을 향상시킵니다.
- 캐시를 통해 동일한 쿼리에 대한 결과를 다시 계산하는 것을 방지할 수 있습니다.
- 데이터베이스 인덱스의 조정
- 데이터베이스의 특정 설정이나 구성을 조정하여 최적화를 수행합니다.
- 이는 데이터베이스 엔진의 설정, 버퍼풀 크기, 쓰레드 수 등을 조절하는 것을 포함합니다.
- 파티셔닝과 샤딩
- 대용량 데이터베이스를 처리하기 위해 파티셔닝과 샤딩을 사용합니다.
- 테이블이나 데이터를 여러 개의 파티션 또는 노드로 나누어 병렬 처리를 통해 성능을 향상시킵니다.
- 캐싱 및 CDN 사용
- 자주 사용되는 데이터나 쿼리 결과를 캐싱하거나 CDN(Content Delivery Network)을 활용하여 정적 자원을 빠르게 제공함으로써 응답 시간을 최적화합니다.
- 일관된 백업 및 인덱싱 전략
- 효율적이고 일관된 백업 전략을 수립하고, 데이터의 인덱싱을 효율적으로 관리하여 복구 시간을 최소화하고 성능을 유지합니다.
- 하드웨어 업그레이드
- 성능 향상을 위해 서버의 하드웨어를 업그레이드하거나, SSD와 같은 고성능 저장장치를 도입하여 디스크 I/O 성능을 향상시킵니다.
데이터베이스에서의 클러스터란 여러개의 서버가 하나의 데이터베이스를 나눠서 처리하는 형태입니다.
위에서 설명한, 고가용성, 병렬처리, 성능향상 3가지를 만족하는 시스템의 구성형태를 데이터베이스 클러스터라고 합니다.
출처
https://blog.naver.com/PostView.nhn?blogId=geartec82&logNo=221438042113
'Database' 카테고리의 다른 글
PostgreSQL | 데이터 표준화 및 정규화 작업함수 - normalize (0) | 2024.07.12 |
---|---|
Database | 인덱스(Index)를 생성 시 주의할점 및 생성전략 (0) | 2024.03.04 |
Database | DB Query Optimizer의 실행계획 선택시, 고려 비용 요소들 (0) | 2024.02.28 |
PostgreSQL | 모니터링 SQL 정리 (0) | 2024.02.27 |
PostgreSQL | 데이터를 한 테이블에서 다른 테이블로 복사하거나 이동 쿼리 (0) | 2024.02.27 |