기타
[5차시] 데이터베이스 및 SQL 튜닝 : 데이터 처리 성능 극대화
킨글
2025. 3. 18. 23:07
데이터베이스 성능 최적화 개요 및 전략
- 쿼리 최적화 전략
- 서브쿼리 대신 조인 사용
- 인덱스 설정 최적화
- 복합 인덱스를 사용하여 다중 조건 쿼리 성능 개선
- 인덱스 스캔과 인덱스 시크의 차이 이해
- 인덱스 스캔 : 전체 데이터를 훓음
- 인덱스 시크 : 필요한 데이터만 빠르게 찾아가는 방식
- B-Tree 인덱스와 Hash 인덱스의 사용
- B-Tree 인덱스 : 범위 검색
- Hash 인덱스 : 필요한 데이터만 빠르게 찾아감
- 메모리 및 캐시 최적화
- 버퍼 풀(Buffer Pool) 최적화로 디스크 I/O 최소화
- 쿼리캐시 : 자주 사용되는 쿼리 결과를 메모리에 저장
- Shared Buffers와 Work Mem의 적절한 크기 설정
- 캐시 무효화 정책을 통한 데이터 최신 상태 유지
- 디스크 I/O 최적화
- 파티셔닝을 통해 데이터 분할 처리
- I/O 대기 시간 분석 및 개선
- 하드웨어 최적화 전략
- CPU 코어 수 증가로 병렬 처리 능력 향상
- 고속 네트워크 설정으로 데이터 전송 속도 개선
- 디스크 성능 : SSD 사용과 RAID 구성으로 처리량 증가
- 데이터베이스 설정 튜닝
- MySQL : InnoDB 버퍼 풀과 쿼리 캐시 조정
- PostgreSQL : Shared Buffers, Work Mem 설정 최적화
- Oracle : SGA와 PGA 메모리 설정, AWR 보고서를 통한 성능 분
SQL 성능 최적화
- WHERE절 최적화
- 인덱스를 사용하는 조건으로 필터링
- LIKE나 OR 대신 IN 절 사용
- WHERE 절 조건의 순서를 최적화하여 성능 개선
- JOIN 최적화
- INNER JOIN과 OUTER JOIN의 성능 차이
- 인덱스가 적용된 컬럼으로 JOIN
- JOIN 순서 최적화로 성능 개선
- 불필요한 조인은 성능 저하의 원인
- 서브쿼리 대신 JOIN 사용
- 서브쿼리는 성능 저하의 주 원인
- JOIN을 사용하여 쿼리 재작성
- 서브쿼리가 필수일 때는 인덱스 활용
- SELECT 최적화
- DISTINCT는 불필요하게 사용하지 말 것
- LIMIT와 OFFSET 최적화
- LIMIT와 OFFSET을 사용한 페이징 처리
- 서브쿼리를 통해 성능 개선
- 대량 데이터의 페이징에서 성능 문제 발생 가능성
- 인덱스 기반 페이징을 사용하여 OFFSET 문제 해결
- 데이터베이스에 적합한 페이징 전략 설계
- 서브쿼리 최적화를 통해 OFFSET 문제 완화
- OFFSET이 클수록 성능이 떨어짐
- 파티셔닝을 통한 성능 최적화
- 파티셔닝을 사용하여 대용량 데이터를 효율적으로 관리
- Range 파티셔닝과 Hash 파티셔닝 활용
- 쿼리가 특정 파티션만 조회하도록 최적화
- SQL 힌트(Hints) 사용
- 힌트를 통해 쿼리 실행 계획 제어
- 특정 인덱스 사용 강제
- 병렬 처리를 통한 성능 개선
인덱스(INDEX) 최적화
- 인덱스의 기본 개념
- 인덱스는 테이블의 특정 컬럼에 대한 색인 역할
- 인덱스를 사용하면 데이터 조회 속도를 크게 향상
- B-Tree 인덱스가 가장 일반적으로 사용됨
- 인덱스 스캔과 테이블 스캔
- 인덱스 스캔 : 인덱스를 사용해 데이터를 조회
- 테이블 스캔 : 전체 테이블을 스캔하여 데이터 조회
- 인덱스를 사용하지 못하는 쿼리는 테이블 스캔을 유발할 수 있음
- Clustered 인덱스와 Non-Clustered 인덱스
- Clustered 인덱스 : 테이블의 물리적 데이터가 인덱스 순서에 따라 정렬
- Non-Clustered 인덱스 : 인덱스와 데이터가 분리되어 관리
- 한 테이블에 하나의 Clustered 인덱스만 생성 가능
- Non-Clustered 인덱스는 다중 생성 가능, 조회 성능 향상에 사용
스프링 부트 데이터베이스 커넥션풀(HikariCP) 최적화
- HikariCP 고급 설정
- Leak Detection Threshold : 커넥션 누수 감지 시간 설정
- Max Life time : 커넥션의 최대 수명 설정(기본값 : 30 분)
- Validation Timeout : 커넥션 유효성을 검사하는 시간 설정
- Auto Commit : 자동 커밋 여부 설정 (기본값 : true)