오라클 성능 고도화 원리와 해법 I (2016년-2)
페이지 처리의 중요성 0 0 3,812

by 구루비 페이지처리 [2017.01.18]


06.페이지 처리의 중요성

  • 클라이언트/서버 환경에서 대용량 데이터를 조회할 때는 커서를 닫지 않은 채 사용자 이벤트가 발생할 때마다 결과 집합을 Fetch 하도록 구현 가능
  • 웹 애플리케이션 환경에서는 커서를 계속 오픈한 채로 결과집합을 핸들링 할 수 없음

void pagination(ResultSet rs, long pageNo, int pageSize) throws  Exception{
        int i= 0 ;
        while(rs.next){
            if(++i >(pageNo-1)*pageSize) printRow(rs) ;
            if(i == pageNo * pageSize) break ;
        }
        
}

사용자가 다음 페이지를 요청하거나 스크롤 바를 내릴 때마다 개별적인 SQL문을 수행하는 방식으로 페이지 처리를 구현
페이지 처리를 서버 단에서 완료하고 최종적으로 출력할 레코드만 Fetch

* 페이지 처리를 하지 않았을 때 발생하는 부하요인

1. 다량의 Fetch Call 발생
2. 대량의 결과 집합을 클라이언트로 전송하면서 발생하는 네트워크 부하
3. 대량의 데이터 블록을 읽으면서 발생하는 I/O 부하
4. AP서버 및 웹 서버 리소스 사용량 증가

* 부하 해소 방법

1. 페이지 단위로, 화면에서 필요한 만큼씩 Fetch Call
2. 페이지 단위로, 화면에서 필요한 만큼씩 네트워크를 통해 전송.
3. 인덱스와 부분범위처리 원리를 이용해 각 페이지에 필요한 최소량만 I/O
4. 데이터를 소량씩 나누어 전송하므로 AP, 웹 서버 리소스 사용량 최소화

*조회할 데이터가 일정량 이상이고 수행빈도가 높다면 필수적으로 페이지 처리를 구현
*일반 조회 시 페이지 처리
*사용자가 필요할 때만 '전체 조회' 또는 '다운로드 받기' 버튼을 클릭할 수 있도록 기능을 제공.

페이지 처리를 하는 목적은
-1차적으로 데이터베이스 Call 횟수를 감소
-네트워크를 통한 데이터 전송량을 최소화하고
-서버 내에서의 처리 일량을 감소

"구루비 DB 스터디 모임" 에서 2016년에 "오라클 성능 고도화 원리와 해법 I " 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3184

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입