Today I Learned
[집약] 집약, 해시, 정렬 - TEMP 탈락(GROUP BY) 본문
GROUP BY와 관련한 성능으로 정렬과 해시입니다.
정렬과 해시는 모두 메모리는 많이 사용합니다. 충분한 해시용(또는 정렬용) 워킹 메모리가 확보되지 않으면 스왑이 발생합니다. 따라서 저장소 위의 파일이 사용되면서 굉장히 느려집니다. 이때 DBMS에서 사용되는 메모리가 워킹 메모리입니다.
Oracle에서는 정렬 또는 해시를 위해 PGA라는 메모리 영역을 사용합니다. 이때 PGA 크기가 집약 대상(e.g. GROUP BY의 대상) 데이터양에 비해 부족하면, 일시 영역(저장소)를 사용해 부족한 만큼 채웁니다. 이것을 TEMP 탈락이라고 부르는 현상입니다.
TEMP 탈락이 발생하면 메모리만으로 처리가 끝나는 경우와 비교해서 극단적으로 성능이 떨어집니다.
메모리와 저장소(일반적인 디스크)의 접근 속도 차이가 굉장히 많이 나기 때문입니다. 따라서 연산 대상 레코드 수가 많은 GROUP BY 구(또는 집약 함수)를 사용하는 SQL에서는 충분한 성능(실제 환경에서의 부하 검증)을 실행해줘야 합니다. 최악의 경우 TEMP영역을 모두 써버리면 SQL 구문이 비정상적으로 종료되는 경우가 발생할 수 있습니다.
PGA라는 메모리 영역은 부족해지면 부족한 만큼 보충하고자 일시 영역(물리적으로는 저장소의 파일)을 사용합니다.
집약 함수(aggregate function)
- COUNT
- SUM
- AVG
- MAX
- MIN
'데이터베이스' 카테고리의 다른 글
[Oracle] SQL 구문의 실행 시간을 검색하는 방법 (2) | 2022.10.25 |
---|
Comments