부분범위 처리 원리가 바로 테이블 랜덤 엑세스로 인한 인덱스 손익 분기점의 한계를 극복할 히든카드다
3.2.1 부분 범위 처리
1억 건짜리 테이블인데도 결과를 빨리 출력할 수 있는 이유는, DBMS가 데이터를 모두 읽어 한 번에 전송하지 않고 먼저 읽는 데이터부터 일정량(Array Size)을 전송하고 멈추기 때문이다. 데이터를 전송하고 나면 서버 프로세스는 CPU를 OS에 반환하고 대기 큐에서 잠을 잔다. 다음 Fetch Call을 받으면 대기 큐에서 나와 그다음 데이터부터 일정량을 읽어서 전송하고 또다시 잠을잔다. 이처럼 전체 쿼리 결과 집합을 쉼 없이 연속적으로 전송하지 않고 사용자로부터 Fetch Call이 있을 때마다 일정량씩 나누어 전송하는 것을 이른바 '부분범위 처리'라고한다.
정렬 조건이 있을때 부분 범위 처리
Array Size 조정을 통한 Fetch Call 최소화
쿼리 툴에서 부분범위 처리
모든 DBMS는 데이터를 조금씩 나눠서 전송한다. 즉, 부분범위 처리 방식으로 결과 집합을 전송한다. 이 특징을 이용해 중간에 멈췄다가 사용자의 추가 요청이 있을 때마다 데이터를 가져오도록 구현하고 안 하고는 클라이언트 프로그램을 개발하는 개발자의 몫이다.
3.2.3 OLTP 환경에서 부분범위 처리에의한 성능 개선 원리
OLTP(online Transaction Processing) 시스템은 온라인 트랜잭션을 처리하는 시스템이다 일반적으로 소량의 데이터를 읽고 갱신한다. 그런데 항상 소량의 데이터만 조회하는것은 아니다. 수천 수만건을 조회하는 경우도 있다. 인덱스와 부분범위 처리 원리를 잘 활용하면 OLTP환경에서 극적인 성능개선 효과를 얻을 수 있는 원리가 여기 숨겨져 있다.
멈출 수 있어야 의미있는 부분범위 처리
문제는 앞쪽 일부만 출력하고 멈출 수 있는가이다. 이것이 부분범위 처리의 핵심이다.
'도서(Book) > 친절한 SQL 튜닝' 카테고리의 다른 글
3. 인덱스 튜닝 - d. 인덱스 설계 (0) | 2024.11.09 |
---|---|
3. 인덱스 튜닝 - c. 인덱스 스캔 효율화 (0) | 2024.11.08 |
3. 인덱스 튜닝 - a. 테이블 액세스 최소화 (0) | 2024.11.08 |
2. 인덱스 기본 - c. 인덱스 확장기능 사용법 (0) | 2024.11.08 |
2. 인덱스 기본 - b. 인덱스 기본 사용법 (0) | 2024.11.08 |