도서(Book)/친절한 SQL 튜닝 17

5. 소트 튜닝 - b. 소트가 발생하지 않도록 SQL 작성

SQL 작성할 때 불필요한 소트가 발생하지 않도록 작성하자. Union, Minus, Distinct 연산자는 중복 레코드를 제거하기 위한 소트 연산을 발생시키므로 꼭 필요한 경우에만 사용하자 5.2.1 Union vs Union AllUnion: 옵티마이저가 상단과 하단 두 집합 간 중복을 제거하려고 소트 작업을 수행함.Union All: 중복을 확인 x 두 집합을 단순히 결합 → 소트작업을 수행하지 않음.(*될 수 있으면 Union All을 사용하자. 하지만 자칫 결과 집합이 달라질 수 있으므로 주의해야 함.) 5.2.2 Exist활용DISTINCT와 MINUS는 중복 제거를 위해 모든 데이터를 읽어야 하므로 많은 I/O가 발생, 부분 범위 처리가 불가능. 대신, EXISTS(또는 NOT EXISTS..

5. 소트튜닝 - a. 소트 연산에 대한 이해

소트 튜닝이 필요한 이유1. 정렬 작업은 비용이 크다 2. 정렬 작업은 병목이 되기 쉽다 ex) 대량의 데이터 정렬이 필요한 쿼리가 여러 개 동시에 실행되면, PGA 메모리 부족과 Temp 테이블스페이스 경쟁으로 인해 시스템 전체 성능이 저하될 수 있다.3. 불필요한 정렬을 줄일 수 있다4. 메모리 사용량을 최적화할 수 있다 5.1.1 소트 수행 과정기본적으로 PGA에 할당한 Sort Area에서 이루어짐. 다 차면 Temp 테이블 스페이스를 활용. 소트에는 두가지 유형이 있음.메모리 소트(In-Memory Sort): 전체 데이터 정렬 작업을 메모리 내에서 완료하는 것; Internal Sort디스크 소트(To-Disk-Sort): 할당 받은 Sort Area 내에서 정렬을 완료하지 못해 디스크 공간까..

3. 인덱스 튜닝 - b. 부분범위 처리 활용

부분범위 처리 원리가 바로 테이블 랜덤 엑세스로 인한 인덱스 손익 분기점의 한계를 극복할 히든카드다 3.2.1 부분 범위 처리1억 건짜리 테이블인데도 결과를 빨리 출력할 수 있는 이유는, DBMS가 데이터를 모두 읽어 한 번에 전송하지 않고 먼저 읽는 데이터부터 일정량(Array Size)을 전송하고 멈추기 때문이다. 데이터를 전송하고 나면 서버 프로세스는 CPU를 OS에 반환하고 대기 큐에서 잠을 잔다. 다음 Fetch Call을 받으면 대기 큐에서 나와 그다음 데이터부터 일정량을 읽어서 전송하고 또다시 잠을잔다. 이처럼 전체 쿼리 결과 집합을 쉼 없이 연속적으로 전송하지 않고 사용자로부터 Fetch Call이 있을 때마다 일정량씩 나누어 전송하는 것을 이른바 '부분범위 처리'라고한다. 정렬 조건이 있..