소트 튜닝이 필요한 이유
1. 정렬 작업은 비용이 크다
2. 정렬 작업은 병목이 되기 쉽다
ex) 대량의 데이터 정렬이 필요한 쿼리가 여러 개 동시에 실행되면, PGA 메모리 부족과 Temp 테이블스페이스 경쟁으로 인해 시스템 전체 성능이 저하될 수 있다.
3. 불필요한 정렬을 줄일 수 있다
4. 메모리 사용량을 최적화할 수 있다
5.1.1 소트 수행 과정
기본적으로 PGA에 할당한 Sort Area에서 이루어짐. 다 차면 Temp 테이블 스페이스를 활용. 소트에는 두가지 유형이 있음.
- 메모리 소트(In-Memory Sort): 전체 데이터 정렬 작업을 메모리 내에서 완료하는 것; Internal Sort
- 디스크 소트(To-Disk-Sort): 할당 받은 Sort Area 내에서 정렬을 완료하지 못해 디스크 공간까지 사용하는 경우; External Sort
소트 연산은 메모리 집약적이고, CPU 집약적이다. 디스크 소트가 발생하는 순간 SQL 수행 성능은 나빠진다.
더불어 부분범위 처리를 불가능하게 함으로써 OLTP 환경에서 애플리케이션 성능을 저하시키는 주요인이 되기도 한다.
1. 될 수 있으면 소트가 발생하지 않게 SQL을 작성해야하고
2. 소트가 불가피하다면 메모리 내에서 수행을 완료할 수 있도록 한다.
5.1.2 소트 오퍼레이션
1. Sort Aggregate
데이터를 정렬하지 않고, 각 행을 읽으면서 집계 함수(SUM, MAX, MIN, COUNT)의 값을 계산하는 방식.
Sort Area를 사용하지만, 실제로 데이터를 정렬하는 작업은 없음. 대신 모든 데이터를 스캔하면서 누적 계산을 수행함
2. Sort Order By
ORDER BY 절을 사용해 결과 집합을 정렬(Sort)하는 연산으로, 메모리(PGA)나 Temp 테이블스페이스를 사용.
3. Sort Group By
GROUP BY 절을 통해 데이터를 그룹화하고 집계할 때, 데이터를 정렬한 후 그룹별로 집계하는 연산.
4. Sort Unique
DISTINCT나 UNION 연산에서 중복된 데이터를 제거하기 위해 데이터를 정렬하는 연산.
5. Sort Join
Merge Join을 수행하기 위해 조인할 두 테이블을 **정렬(Sort)**한 후 병합하여 조인하는 연산.
6. Window Sort
윈도우 함수(예: ROW_NUMBER, RANK)를 사용해 결과 집합을 정렬하고, 윈도우 연산을 적용하기 위해 데이터를 정렬하는 연산.
== 추가 Q & A ==
Q: 메모리와 디스크의 차이
A:
'도서(Book) > 친절한 SQL 튜닝' 카테고리의 다른 글
5. 소트 튜닝 - c. 인덱스를 이용한 소트 연산 생략 (1) | 2024.11.13 |
---|---|
5. 소트 튜닝 - b. 소트가 발생하지 않도록 SQL 작성 (0) | 2024.11.13 |
4. 조인 튜닝 - d. 서브쿼리 조인 (0) | 2024.11.12 |
4. 조인 튜닝 - a. NL 조인 (0) | 2024.11.12 |
3. 인덱스 튜닝 - d. 인덱스 설계 (0) | 2024.11.09 |