티스토리 뷰

데이터베이스 성능 최적화는 개발자와 DBA에게 중요한 작업 중 하나입니다. SQL 문이 비효율적으로 작성되면 시스템 자원이 불필요하게 소비되고, 응답 시간이 길어질 수 있습니다. 이러한 문제를 사전에 분석하고 개선하기 위해 EXPLAIN PLAN을 활용할 수 있습니다.
이 글에서는 EXPLAIN PLAN의 개념과 사용법, 그리고 실행 계획을 해석하는 방법에 대해 알아보겠습니다.
1. EXPLAIN PLAN이란?
EXPLAIN PLAN은 SQL 문이 실행될 때 옵티마이저(Optimizer)가 선택한 실행 계획을 보여주는 기능입니다. 이를 통해 쿼리가 어떤 방식으로 실행될지를 예측하고, 성능을 저하시키는 요인을 파악할 수 있습니다.
주요 확인 요소:
- 실행 순서 및 접근 방법 (Full Table Scan, Index Scan 등)
- 조인 방식 (Nested Loop, Hash Join 등)
- 예상 비용 (Cost) 및 실행 시간
2. EXPLAIN PLAN 실행 방법
2.1 실행 계획 생성하기
EXPLAIN PLAN을 사용하려면 먼저 다음과 같이 실행해야 합니다:
EXPLAIN PLAN FOR
SELECT * FROM employees WHERE department_id = 10;
이렇게 실행하면 실행 계획이 PLAN_TABLE이라는 테이블에 저장됩니다.
2.2 실행 계획 조회하기
실행 계획을 확인하려면 다음 쿼리를 실행합니다:
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
Explain plan을 쿼리문을 통해 보는 방법도 있지만 툴을 사용하고 있다면 자체적으로 단축키를 통해 실행 계획을 조회할 수 있어서 이를 활용하는 것이 편하다.
3. 실행 계획 해석 방법
3.1 주요 컬럼 설명
- ID: 실행되는 작업의 순서를 나타냅니다. 숫자가 높을수록 내부 단계입니다.
- Operation: 수행되는 작업을 나타냅니다 (예: TABLE ACCESS, INDEX SCAN, HASH JOIN 등).
- Object Name: 액세스되는 테이블 또는 인덱스의 이름입니다.
- Cost: 쿼리 실행 비용을 의미하며, 낮을수록 효율적인 실행 계획입니다.
3.2 Operation 유형
- TABLE ACCESS FULL
- 전체 테이블을 읽는 방식으로, 데이터 양이 많을 경우 성능 저하 가능성이 큽니다.
- INDEX RANGE SCAN
- 인덱스를 사용하여 특정 범위의 데이터를 검색하는 방식으로 효율적입니다.
- INDEX UNIQUE SCAN
- 유니크 인덱스를 활용하여 한 개의 결과만 가져오는 방식입니다.
- NESTED LOOPS JOIN
- 작은 데이터셋을 반복적으로 검색할 때 효과적인 조인 방식입니다.
- HASH JOIN
- 대용량 데이터 조인 시 사용되며, 임시 메모리 공간을 활용합니다.
4. 성능 튜닝을 위한 조치
EXPLAIN PLAN을 분석한 후, 성능을 향상시키기 위해 다음과 같은 조치를 고려할 수 있습니다:
4.1 인덱스 활용 여부 확인
- TABLE ACCESS FULL이 발생하면 인덱스를 추가하여 INDEX SCAN으로 변경할 수 있는지 확인합니다.
CREATE INDEX idx_emp_dept ON employees(department_id);
4.2 조인 방식 최적화
- NESTED LOOPS가 아닌 HASH JOIN이 필요할 경우, 옵티마이저 힌트를 사용하여 변경할 수 있습니다.
SELECT /*+ USE_HASH(emp) */ *
FROM employees emp JOIN departments dept
ON emp.department_id = dept.department_id;
4.3 불필요한 데이터 읽기 최소화
- 필요한 컬럼만 조회하도록 **SELECT *** 대신 특정 컬럼을 명시합니다.
SELECT employee_id, first_name, department_id FROM employees;
5. 마무리
EXPLAIN PLAN을 활용하면 SQL 쿼리의 실행 방식과 성능 문제를 사전에 파악하여 최적화할 수 있습니다. 이를 통해 데이터베이스 리소스를 효율적으로 사용하고, 빠른 응답 속도를 유지할 수 있습니다.
앞으로 SQL 최적화를 진행할 때는 항상 EXPLAIN PLAN을 활용하여 실행 계획을 분석하는 습관을 들이는 것이 중요합니다. 🚀
'개발 지식 > 데이터베이스' 카테고리의 다른 글
| SQL 잘 쓰는 방법 | 가독성과 유지보수를 고려한 실용 가이드 (1) | 2025.02.18 |
|---|---|
| DELETE, DROP, TRUNCATE 비교 | 어떤 상황에서 사용해야 할까? (0) | 2025.01.21 |
| 데이터베이스 성능의 핵심 | 인덱스와 복합 인덱스란 무엇인가? (0) | 2025.01.13 |
| DB 성능 튜닝 | 300만 건 이상의 데이터에서 페이지네이션 성능 개선 (0) | 2025.01.12 |
| DB 성능 튜닝 | 인덱스와 쿼리 최적화 (0) | 2025.01.09 |
- Total
- Today
- Yesterday
- Ai
- 크롬
- 실시간통신
- readtracker
- 쿼리
- 인덱스
- LoggingFilter
- 데이터베이스
- 개발자
- read-tracker
- 쿼리최적화
- 삭제쿼리
- SSE
- ServerSentEvents
- 개발
- 페이지네이션
- SQL
- 개발회고
- keyset
- db성능개선
- 데이터베이스삭제
- Spring
- db
- 생산성
- grammarly
- 개발지식
- 레기서시스템
- 확장프로그램
- 기술부채
- pub/sub
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |