Database
[SQLP] 소트 튜닝(Sort Tuning) 파헤치기 (1)
sujjjing
2024. 5. 16. 12:44
1. 소트가 뭐야
소트 Sort
소트(sort)는 정렬을 가리키는 영어 낱말이다.
2. 메모리 소트와 디스크 소트
- (오라클) 소트는 PGA에 할당한 Sort Area에서 수행하며 PGA가 부족하면 Temp 테이블 스페이스를 사용
- 메모리 소트 : PGA 내에서 소트 완료할 경우 'Internal Sort' 또는 'Optimal Sort'라고도 한다.
- 디스크 소트 : Temp 테이블 스페이스까지 사용하여 소트 완료할 경우 'External Sort'라고도 한다.
소트는 최대한 발생하지 않도록 SQL을 작성해야 하고, 소트가 불가피하다면 메모리 내에서 수행을 완료할 수 있도록 해야 함
소트는 메모리 집약적일 뿐만 아니라 CPU 집약적임
3. 어떨 때 소트가 발생할까?
단순히 order by 쓸 때만 정렬되는게 아니라 다양한 경우에서 소트가 발생하더라
(1) Sort Aggregate
- 전체 로우를 대상으로 집계를 수행 할 때 나타나지만 실제로 데이터를 정렬하지 않고 Sort Area만 사용함
- sum, max, min, avg, count 함수
select sum(sal), max(sal), min(sal), avg(sal) from emp
(2) Sort order by
- 정렬된 결과집합을 얻고자 할 때 사용
select * from emp order by sal desc;
(3) Sort Group By
- 소팅 알고리즘을 사용해 그룹별 집계를 수행할 때 나타난다.
- 소팅 알고리즘을 사용해 값을 집계한다는 뜻일 뿐 결과의 정렬을 의미하지는 않는다. 따라서 정렬된 그룹핑 결과를 얻고자 한다면, 실행계획에 설령 'Sort Group By'라고 표시되더라도 반드시 Order By를 명시해야 한다.
- Group By 절에 Order By절을 명시하지 않으면 대부분 Hash Group By 방식으로 처리한다.
select deptno, sum(sal), max(sal), min(sal), avg(sal)
from emp
group by deptno
-- 부서번호를 기준으로 ORDER BY 하므로 SORT GROUP BY 오퍼레이션 사용
SELECT DEPT_NO, MAX(SAL) FROM 직원 GROUP BY DEPT_NO ORDER BY DEPT_NO;
-- ORDER BY가 없으므로 HASH GROUP BY 오퍼레이션 사용
SELECT DEPT_NO, MAX(SAL) FROM 직원 GROUP BY DEPT_NO;
(4) Sort Unique
- 중복 레코드를 제거하는 소트 오퍼레이션으로 UNION, Distinct 사용 시 나타난다.
(5) Sort Join
- 소트 머지 조인을 수행할 때 나타남
(6) Window Sort
- 윈도우 함수(분석 함수)를 수행할 때 나타남
SELECT MGR , ENAME , SAL , SUM(SAL) OVER (PARTITION BY MGR) MGR_SUM FROM EMP;