[DB] - 튜닝,클러스터링,리플리케이션

백엔드류·2024년 3월 27일

DB

목록 보기
4/4

DB 튜닝이란?

DB 튜닝이란 DB의 구조나, DB 자체, 운영체제 등을 조정하여 DB 시스템의 전체적인 성능을 개선하는 작업
튜닝은 DB 설계 튜닝 -> DBMS 튜닝 -> SQL 튜닝 단계로 진행

  • DB 설계 튜닝(모델링 관점)

    • DB 설계 단계에서 성능을 고려하여 설계
    • 데이터 모델링, 인덱스 설계
    • 데이터파일, 테이블 스페이스 설계
    • 데이터베이스 용량 산정
    • 튜닝 사례 : 반정규화, 분산파일배치

  • DBMS 튜닝(환경관점)

    • 성능을 고려하여 메모리나 블록 크기 지정
    • CPU, 메모리 I/0에 관한 관점
    • 튜닝 사례 : Buffer 크기, Cache 크기

  • SQL 튜닝(App관점)
    - SQL 작성 시 성능 고려
    - Join, Indexing, SQL Execution Plan
    - 튜닝 사례 : Hash/ Join


DELETE, TRUNCATE, DROP 의 차이?

  • DELETE: 테이블에서 특정 조건을 만족하는 행(레코드)을 삭제하는 데 사용됩니다. 이는 특정 행을 삭제하는 데 사용되며, 테이블의 데이터만 영향을 줍니다. 삭제 후 되돌릴수 있습니다.

  • TRUNCATE: 특정 테이블의 모든 데이터를 삭제하는 데 사용됩니다. TRUNCATE 문을 사용하면 테이블의 모든 행이 삭제되지만 테이블 자체는 삭제되지 않습니다. TRUNCATE는 일반적으로 DELETE보다 더 빠르게 실행되지만, 롤백(rollback)이 불가능하며, 트리거(trigger)를 실행하지 않습니다. 테이블 용량이 줄어들고 인덱스 등도 삭제됩니다.

  • DROP: 특정 테이블이나 데이터베이스 객체를 삭제하는 데 사용됩니다. DROP 문은 테이블, 뷰(view), 인덱스(index), 프로시저(procedure), 함수(function) 등과 같은 객체를 삭제할 수 있습니다. 이 명령을 사용하면 해당 객체와 관련된 모든 데이터가 삭제됩니다. 롤백이 불가능합니다.



DB 클러스터링 & 리플리케이션 ?

📌 클러스터링

클러스터링이란 여러 개의 DB를 수평적인 구조로 구축하는 방식입니다. 동기 방식으로 사용되며, 다음과 같은 장단점이 있습니다.

👀 장점 :

  • DB 간의 데이터를 동기화하여 항상 일관성있는 데이터를 얻을 수 있다.

  • 1개의 DB가 죽어도 다른 DB가 살아 있어 시스템을 장애없이 운영할 수 있다.(높은 가용성)

  • 기존에 하나의 DB서버에 몰리던 부하를 여러 곳으로 분산시킬 수 있다.(로드밸런싱)


👀 단점 :

  • 저장소 하나를 공유하면 병목현상이 발생할 수 있다.
  • 병목현상 : 전체 시스템이 성능이나 용량이 하나의 구성요소로 인해 제한을 받는 현상
  • 서버를 동시에 운영하기 위한 비용이 많이 든다.


📌 리플리케이션

리플리케이션이란 여러 개의 DB를 권한에 따라 수직적인 구조로 구축하는 방식입니다. 비동기 방식으로 사용되며, 다음과 같은 장단점이 있습니다.

👀 장점 :

  • DB 요청의 60~80% 정도가 읽기 작업이기 때문에 Replication만으로도 충분히 성능을 높일 수 있다.

  • 비동기 방식으로 운영되어 지연 시간이 거의 없다.


👀 단점 :

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

  • Master DB가 다운되면 복구 및 대처가 까다롭다.



정리

클러스터링은 DB 서버만을 늘려 처리하는 것이고 리플리케이션은 DB 서버와 스토리지 모두 복제하여 구성하는 방법이다. 둘 중 어느것이 좋다고 단정 지을 수는 없다. 무엇보다 DB를 무조건 확장하는 것은 최대한 피해야 한다. 각자의 서비스에 맞춰서 적절하게 선택한다면 좀 더 성능이 좋은 서비스를 제공할 수 있다.




참고 :
https://tecoble.techcourse.co.kr/post/2021-09-18-replication_clustering/
https://dev-coco.tistory.com/158
profile
공부한 내용을 정리한 블로그입니다 & 백엔드 개발자

0개의 댓글