클라이언트/서버 환경에서 대용량 데이터를 조회할 때는 커서를 닫지 않은 채 사용자 이벤트가 발생할 때마다 결과 집합을 Fetch 하도록 구현할 수 있다.
웹 애플리케이션 환경에서는 커서를 계속 오픈한 채로 결과집합을 핸들링 할 수 없다.
데이터베이스와의 연결을 지속하지 않는 웹 환경이기 때문에 사용자가 다음 페이지를 요청하거나 스크롤 바를 내릴 때마다 개별적인 SQL문을 수행하는 방식으로 페이지 처리를 구현해야 한다.
페이지 처리를 서버 단에서 완료하고 최종적으로 출력할 레코드만 Fetch 하도록 해야 한다.
페이지 처리를 하지 않았을 때 발생하는 부하요인 1. 다량의 Fetch Call 발생 (SQL*Net roundtrips to/from client) 2. 대량의 결과 집합을 클라이언트로 전송하면서 발생하는 네트워크 부하 (byte sent via SQL*Net to client) 3. 대량의 데이터 블록을 읽으면서 발생하는 I/O 부하 4. AP서버 및 웹 서버 리소스 사용량 증가.
해결방법 1. 페이지 단위로, 화면에서 필요한 만큼씩 Fetch Call 2. 페이지 단위로, 화면에서 필요한 만큼씩 네트워크를 통해 전송. 3. 인덱스와 부분범위처리 원리를 이용해 각 페이지에 필요한 최소량만 I/O 4. 데이터를 소량씩 나누어 전송하므로 AP, 웹 서버 리소스 사용량 최소화
조회할 데이터가 일정량 이상이고 수행빈도가 높다면 필수적으로 페이지 처리를 구현해야 한다.
일반 조회 시에는 페이지 처리를 하고, 사용자가 필요할 때만 '전체 조회' 또는 '다운로드 받기' 버튼을 클릭할 수 있도록 기능을 제공.
페이지 처리를 하는 목적은, 1차적으로 데이터베이스 Call 횟수를 줄이고 네트워크를 통한 데이터 전송량을 최소화하고, 서버 내에서의 처리 일량을 줄이는 데에도 있다.