본문 바로가기
CS

데이터베이스 최적화

by Hyeon_E 2023. 11. 16.

데이터베이스 인덱스(Index)

저장한 컬럼을 기준으로 메모리 영역에 일종의 색인을 생성하는 것
검색 속도는 빨라지고 삽입, 삭제, 갱신 속도는 느려짐


추가적인 오버헤드

  • INSERT 시 : 새로운 데이터에 대한 인덱스를 추가함
  • DELETE 시 : 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행함
  • UPDATE 시 : 기존의 인덱스를 사용하지 않음 처리하고, 갱신된 데이터의 인덱스를 추가함

장점

테이블 조회 속도 및 성능 향상

전반적인 시스템 부하 감소


단점

인덱스를 관리하기 위한 별도의 저장공간 필요

추가 작업 필요

잘못 사용할 경우 오히려 성능이 저하됨

 

인덱스를 사용하면 좋은 경우

규모가 큰 테이블, 삽입·삭제·갱신이 자주 발생하지 않는 컬럼, Join, where, order by에 자주 사용되는 컬럼, 데이터의 중복도가 낮은 컬럼 등

 

옵티마이저(Optimizer)

https://cieloinvernale.tistory.com/40

 

가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진 - DBMS의 CPU

 

규칙 기반 옵티마이저

실행 속도가 빠른 순으로 규칙을 먼저 세워두고 우선순위가 앞서는 방법을 채택
오라클8 이하의 버전에서 기본으로 설정된 옵티마이저


비용 기반 옵티마이저

옵티마이저에서 실행 계획을 세운 뒤 비용이 최소한으로 나온 실행 계획을 수행
최근에 가장 많이 사용하고 있는 방식, 오라클10 이후 버전

 

클러스터링(Clustering)

여러 개의 DB를 수평적인 구조로 구축하는 방식

DB 들 간의 데이터 무결성 검사를 하는 동기 방식으로 데이터를 동기화

  • Active - Active Clustering : 클러스터를 항상 가동하여 사용 가능한 상태로 두는 방식
  • Active - Standby Clustering : 일부는 가동, 일부는 대기상태로 구성하는 방식

처리 방식

  • 노드에 쓰기 트랜잭션이 수행되고, Commit 실행
  • 실제 디스크에 쓰기 전에 다른 노드로 데이터 복제를 요청
  • 다른 노드에서 복제 요청을 수락한다는 신호(OK)를 보내고 디스크에 쓰기 시작
  • 다른 노드로부터 신호(OK)를 받으면 실제 디스크에 데이터를 저장

장점

동기화를 통해 항상 일관성 있는 데이터를 얻을 수 있음

시스템을 장애 없이 운영할 수 있음

 

단점

동기화하는 시간이 필요하여 쓰기 성능이 떨어짐

장애가 전파된 경우 처리가 까다로움

 

레플리케이션(Replication)

여러 개의 DB를 권한에 따라 수직적인(Master-Slave)로 구축하는 방식
Master Node는 쓰기 작업만을 처리하고 Slave Node는 읽기 작업만을 처리
Master와 Slave 간의 데이터 무결성 검사를 하지 않는 비동기 방식으로 노드들 간의 데이터를 동기화

 

처리방식

  • Master Node에 쓰기 트랜잭션 수행
  • Master Node는 데이터를 저장하고 트랜잭션에 대한 로그를 파일에 기록 (BIN LOG)
  • Slave Node의 IO Thread는 Master Node의 로그 파일(BIN  LOG)을 파일(Replay Log)에 복사
  • Slave Node의 SQL Thread는 파일(Replay Log)을 한 줄씩 읽으면서 데이터를 저장

장점

DB 요청은 대부분 읽기 작업이기 때문에 충분히 성능을 높일 수 있음

비동기 방식으로 지연시간이 거의 없음

 

단점

노드들 간의 데이터 동기화가 보장되지 않아 일관성 있는 데이터를 얻지 못할 수 있음

Master Node 다운 시 복구 및 대처가 까다로움

 

샤딩(Sharding)

각 DB서버에서 데이터를 분할하여 저장하는 방식. DB서버의 부하를 분산할 수 있음
테이블을 특정 기준으로 나누어 저장 및 검색함으로써 시간 효율을 높일 수 있음
데이터를 어떻게 분산시킬지 어떻게 읽을지에 대한 것이 중요한데, 데이터 분산의 기준이 되는 것이 Shard Key


대표적인 Shard Key 방식

  • Hash Sharding
  • Dynamic Sharding
    Entity Group

'CS' 카테고리의 다른 글

비선형 자료형  (1) 2023.11.17
데이터베이스 조인(Join)  (0) 2023.11.16
데이터베이스 인덱스  (0) 2023.11.16
데이터베이스 종류  (0) 2023.11.16
MAC주소, IP주소, DHCP, NAT, HTTPS  (0) 2023.11.14

댓글