728x90
SMALL
1. 튜닝 정의
항목 | 설명 |
튜닝(Tuning) | 데이터베이스 또는 SQL 쿼리의 성능을 최적화하여 더 빠르고 효율적으로 작동하도록 개선하는 작업 |
2. 튜닝 종류 및 설명
튜닝 항목 | 설명 | 예시 |
SQL 튜닝 | 느리거나 비효율적인 SQL 문을 분석하여 재작성함 | SELECT * 대신 필요한 컬럼만 조회 |
인덱스 튜닝 | 검색 속도 향상을 위해 적절한 인덱스를 생성/제거 | WHERE name = '홍길동' → name 컬럼 인덱스 생성 |
조인 튜닝 | 서브쿼리 또는 비효율적인 JOIN을 개선 | IN (SELECT...) 대신 JOIN 사용 |
통계정보 갱신 | 옵티마이저가 적절한 실행 계획을 세우도록 최신 통계 유지 | ANALYZE TABLE users; |
DB 구조 튜닝 | 테이블 구조 최적화 (정규화/비정규화, 파티셔닝 등) | 큰 테이블을 연도별 파티션으로 분리 |
서버/메모리 튜닝 | DB 설정값 조정 (캐시, 커넥션 풀 등) | MySQL의 innodb_buffer_pool_size 조정 |
3. 각 튜닝 항목별 상세 예시
3-1. SQL 튜닝
-- 비효율적인 쿼리
SELECT * FROM orders WHERE TO_CHAR(order_date, 'YYYY-MM') = '2024-03';
-- 개선된 쿼리
SELECT order_id, order_date FROM orders
WHERE order_date BETWEEN DATE '2024-03-01' AND DATE '2024-03-31';
3-2. 인덱스 튜닝
-- 인덱스 미사용 쿼리
SELECT * FROM users WHERE email = 'test@example.com';
-- 인덱스 생성
CREATE INDEX idx_users_email ON users(email);
3-3. 조인 튜닝
-- 서브쿼리 방식
SELECT name FROM customers WHERE id IN (SELECT customer_id FROM orders);
-- JOIN 방식
SELECT DISTINCT c.name FROM customers c
JOIN orders o ON c.id = o.customer_id;
3-4. 통계 정보 갱신
-- MySQL
ANALYZE TABLE users;
-- PostgreSQL
VACUUM ANALYZE users;
3-5. DB 구조 튜닝
-- 단일 테이블 (비효율적)
SELECT * FROM logs;
-- 파티셔닝 예시 (PostgreSQL)
CREATE TABLE logs_2024 PARTITION OF logs FOR VALUES FROM ('2024-01-01') TO ('2025-01-01');
3-6. 서버/메모리 튜닝 (MySQL 예시)
# my.cnf 설정 예시
innodb_buffer_pool_size = 1G # 메모리 캐시 영역 증가
max_connections = 200 # 동시 접속자 수 증가
4. 참고 사항
- 튜닝은 성능 향상뿐 아니라 리소스 절약, 장애 대응 시간 단축에도 효과적
- 실행 계획(EXPLAIN), 모니터링 툴, 쿼리 로그 등을 함께 활용하면 분석이 수월
- DBMS마다 문법과 성능 특성이 다르므로 환경에 맞는 튜닝 전략이 필요
LIST
'🔹DBMS' 카테고리의 다른 글
📘 Oracle DB Lock 문제 대응 가이드 (0) | 2025.03.28 |
---|