-
SQL 수행중 가공된 데이터 집합필요시, 오라클은 PGA와 TEMP테이블 스페이스를 활용
-
소트머지 조인, 해시 조인, 데이터 소트와 그룹핑등이 대표적
1.1 소트 수행 과정
-
소트는 기본적으로 PGA에 할당한 Sort Area에서 수행
-
메모리공간인 Sort Area가 다 차면 디스크 TEMP테이블 스페이스 활용
-
SORT AREA에서 완료할수있는지에 따라 소트를 두가지 유형으로 분류
- 메모리 소트(In-Memory sort) : 전체 데이터의 정렬 작업을 메모리 내에서 완료하는것, 'Internal Sort'라고도 한다.
- 디스크 소트(To-disk Sort) : 할당받은 Sort Area내에서 정렬을 완료하지 못해 디스크 공간까지 사용하는 경우, 'External Sort' 라고도 한다.
-
디스크 소트 과정
- 소트 대상집합을 SGA버퍼캐시를 통해 READ
- 일차적으로 Sort Area에서 정렬시도
- 양이 많을때는 정렬된 중간집합을 TEMP테이블스페이스에 임시 세그먼트를 만들어 저장
- Sort Area가 찰때마다 TEMP영역에 저장해 둔 중간 단계 집합을 'Sort Run'이라고 부른다.
- 정렬된 최종 결과집합을 얻으려면 이를 다시Merge해야한다. 각Sort Run내에서는 이미 정렬된 상태이므로 Merge과정은 어렵지 않다.
- 오름차순 정렬이라면 각각에서 가장 작은값 부터 PGA로 읽어들이다가 PGA가 찰때마다 쿼리 수행 다음단계로 전달하거나 클라이언트에게 전송하면된다.
-
소트연산은 메모리집약적(Memory-intensive)일뿐 아니라 CPU집약적(CPU-intensive)
-
처리할 데이터량이 많을때는 디스크I/O까지 발생하므로 쿼리성능을 좌우하는 매우중요한 요소
-
부분범위 처리를 불가능하게 함으로써 OLTP환경에서 어플리케이션 성능저하의 주요인이되기도한다.
-
되도록 소트가 발생하지않도록 SQL을작성해야하고, 소트가 불가피하면 메모리내에서 수행을 완료할 수 있도록한다.
1.2 소트 오퍼레이션
1.2.1 Sort Aggregate
- 전체로우를 대상으로 집계수행시 나타남
- 'Sort'라는 표현을쓰지만 실제 데이터 정렬은 하지않는다. > Sort Area를 사용한다는 의미
SELECT SUM(SAL), MAX(SAL), MIN(SAL), AVG(SAL) FROM EMP;
- 데이터 정렬하지않고 SUM, MAX, MIN, AVG값 구하는 절차
- Sort Area에 SUM, MAX, MIN, COUNT값을 위한 변수를 각각 하나씩 할당
- EMP테이블 첫번째 레코드에서 읽은 SAL값을 SUM, MAX, MIN변수에 저장하고, COUNT변수에는 1을 저장
- EMP테이블에서 레코드를 하나씩읽어 내려가면서 SUM변수에는 값 누적, MAX변수는 기존보다 클경우 대체, MIN변수는 기존보다 작은값일경우 대체, COUNT변수에는 SAL값이 NULL이 아닌 경우 1씩 증가
- EMP 레코드를 다읽고나면 각 변수에 담긴값을 출력하고, AVG는 SUM값을 COUNT로 나는 값을 출력
1.2.2 Sort Order By
1.2.3 Sort Group By
- 소팅 알고리즘을 사용해 그룹별 집계를 수행할때 나타난다.
- 수천명의 사원(EMP)이 근무하는 회사를 가정
- 부서는 4개뿐, 부서코드는 10,20,30,40
- 컴퓨터없이 부서별 급여(SAL)을 집계할때 어떤방법이 좋을까?
- 집계항목은 급여에 대한 합계, 최대값, 최소값, 평균값
- 각 부서의 집계정보기록을위한 메모지를두고 부서번호순으로 정렬하면 준비끝
- 각사원의 급여정보를 읽기 시작, 각사원의 부서번호에 해당하는 메모지 찾기, 정렬돼있으니 찾기쉽다.
- 메모지 찾았으면 집계정보(SUM, MAX, MIN, COUNT)갱신
- 1.2.1의 Sort Aggregate와 동일한 방식 사용.
- 오라클은 이런방식을 사용하며 부서수가 많지않다면Sort Area가 전혀클필요가없다, Temp테이블스페이스를 쓰지 않는다는 뜻.
- Hash Group By방식은 정렬을하지않고 해싱알고리즘을 사용하여 그룹별 집계항목을 갱신한다.