데이터베이스 튜닝
데이터베이스 튜닝은 시스템의 성능을 최적화하고 자원을 효율적으로 사용하기 위해 데이터베이스 관리 시스템 (DBMS) 의 설정을 조정하는 과정이다.
데이터베이스 튜닝은 크게 서버 튜닝, SQL 튜닝, 스키마 튜닝 등 으로 나눌 수 있다.
SQL 튜닝
데이터 검색, 삽입, 갱신, 삭제 작업의 효율을 높이기 위해 SQL 쿼리를 최적화하는 방법이다.
1. 필요한 필드만 선택해서 가져온다.
-- 나쁜 예: 모든 필드를 선택
SELECT * FROM employees WHERE department_id = 10;
-- 좋은 예: 필요한 필드만 선택
SELECT employee_id, first_name, last_name FROM employees WHERE department_id = 10;
2. 인덱스를 활용한다.
검색 조건에 사용 되는 컬럼에 적절한 인덱스를 생성하여 검색 속도를 향상시킬 수 있다.
-- 인덱스 생성 예
CREATE INDEX idx_department_id ON employees(department_id);
3. 필요에 따라 서브 쿼리를 조인으로 또는 조인을 서브 쿼리로 변경한다.
- 필요한 경우 조인을 최소화 하거나 더 효율적으로 수행할 수 있는 방법을 고려한다.
- 데이터의 양이 많고 쿼리가 복잡한 경우 JOIN 을 사용하는 것이 효율적일 수 있다.
- 상황에 따라 다르기 때문에 실제 테스트해보고 결정하는 것이 좋다.
-- 조인 예제
SELECT e.employee_id, e.first_name, e.last_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id
WHERE d.department_name = 'HR';
-- 서브 쿼리 예제
SELECT employee_id, first_name, last_name
FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE department_name = 'HR');
서버 튜닝
서버 튜닝은 데이터베이스 서버의 하드웨어나 DBMS 설정을 조정하여 성능을 향상시키는 방식이다.
- 메모리 할당
- 캐시 사이즈 조정
- 동시 연결 세션 수 조정
- 디스크 I/O 최적화
스키마 튜닝
스키마 튜닝은 데이터베이스의 물리적 구조인 테이블과 인덱스의 설계를 최적화하는 것을 의미한다.
- 정규화를 통한 데이터 중복 최소화
- 인덱스 설계 최적화
클러스터링과 리플리케이션
클러스터링 (Clustering)
1개의 서버로 데이터베이스를 구축해서 사용할 경우 이 서버가 죽는다면 서비스가 죽는 현상이 발생하게 된다.
또는 사용자가 많이 유입 되었을 경우 이에 대한 처리를 하나의 서버가 처리하지 못하고 죽을 수도 있다.
이런 이유로 하나의 데이터베이스를 여러 서버가 나눠서 구축하는데,
이처럼 하나의 데이터베이스가 여러개의 서버로 구축되는 경우를 클러스터라고 한다.
클러스터링에는 Active - Active 방식과 Active - Stand by 방식이 있다.
Active - Active 방식
- 두 서버를 동시에 운영하는 방식이다.
- DB 서버 하나가 죽더라도 다른 DB 서버가 작동할 수 있고 두 서버를 동시에 운영하기 때문에 성능이 좋다.
- 하지만 스토리지 하나를 공유하기 때문에 병목 생길수 있다.
- 두 서버를 동시에 운영하기 때문에 비용이 비싸다.
Active - Stand by 방식
- DB 서버 하나는 Active 상태로 두고 다른 하나는 대기 상태로 두는 방식이다.
- 이 역시 사용하던 DB 서버가 죽더라도 대기하던 서버를 Active 시켜 사용하여 가용성이 좋다.
- 하나의 서버만 Active 하기에 비용 절감에는 좋지만 성능에 대한 이점이 사라진다.
- 대기하던 서버를 active 하는데도 시간이 걸린다.
리플리케이션
리플리케이션은 복제본 데이터베이스를 운용하는 것이다.
원본 데이터베이스를 Master , 복제된 데이터베이스를 Slave 라고 부르며
Slave 데이터베이스는 Master 데이터베이스를 복제하여 동일한 데이터를 갖고 있다.
장점
- 부하를 분산시킬 수 있다.
- 그림에서 보듯이 Master 와 Slave 는 서로 처리하는 명령어가 다르다.
- Master 는 Insert, Update, Delete 를 처리하고 Slave는 Select 를 처리하여 부하를 분산시킬 수 있다.
- 안전성
- Master 데이터베이스가 손상되더라도 Slave 데이터베이스를 통해 복구할 수 있다.
단점
- Slave 데이터베이스는 비동기 방식으로 Master 데이터베이스와 동기화 하기 때문에 두 데이터베이스 간의 데이터 동기화가 조장되지 않아 일관성에 문제가 생길수 있다.
- Master 데이터베이스가 정상 작동하지 않는다면 복구 및 대처가 까다롭다.
'CS > 데이터베이스' 카테고리의 다른 글
트랜잭션 특징과 격리 수준 (0) | 2024.02.16 |
---|---|
데이터베이스 인덱스 (1) | 2024.02.13 |
데이터베이스 설계와 정규화 (0) | 2024.02.06 |
SQL 집단함수와 GROUP BY 절, HAVING 절 정리 (0) | 2024.02.02 |
SQL 중첩 쿼리와 조인 쿼리 (0) | 2024.02.02 |