6. 페이지 처리의 중요성
2010.07.11 22:14
- 대용량 데이터 조회시
- 클라이언트/서버 환경 : 커서를 닫지 않은 채 사용자 이벤트 발생 시 결과 집합을 Fetch하도록 구현
- 웹 애플리케이션 환경 : 데이터베이스와의 연결을 지속하지 않는 웹환경으로 다음 페이지 요청 or
스크롤 바 변경때마다 개별적은 SQL 문 수행 방식으로 페이지 처리 구현
- Bad Example
- 데이터를 계속 Fetch 하다 출력 페이지에 도달 시 그때부터 PrintRow 호출로 pagesize 개수만큼 로우 출력 후 Fetch를 멈춤
→ 뒤 페이지로 이동할수록 불필요하게 많은 Fetch Call 유발
→ FetchSize를 늘려도 불필요한 Fetch Count 는 줄일 수 있지만 Array 버퍼에 쌓인 많은 로우를 읽으면서 발생하는
CPU 리소스 낭비와 메모리 사용량이 증가,
앞페이지 출력시 불필요한 뒷 부분의 로우를 가져오게되어 서버 및 네트워크 부하 가중
☞ 페이지 처리를 서버 단에서 완료하고 최종적으로 출력할 레코드만 Fetch
- 페이지 처리를 하지 않을 시 발생하는 부하요인
1. 다량의 Fetch Call 발생
2. 대량의 결과 집합을 클라이언트로 전송하면서 발생하는 네트워크 부하
3. 대량의 데이터 블록을 읽으면서 발생하는 I/O 부하
4. AP 서버 및 웹 서버 리소스 사용량 증가
- 페이지 처리
1. 페이지 단위로, 화면에서 필요한 만큼씩 Fetch Call
2. 페이지 단위로, 화면에서 필요한 만큼씩 네트워크를 통해 전송
3. 인덱스와 부분범위처리 원리를 이용해 각 페이지에 필요한 최소량만 I/O
4. 데이터를 소량씩 나누어 전송하므로 AP / 웹 서버 리소스 사용량 최소화
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
47 |
5. Fetch Call 최소화
![]() | 휘휘 | 2010.07.05 | 16853 |
46 | 1. Call 통계 | 실천하자 | 2010.07.05 | 10447 |
45 |
4. Array Processing 활용
![]() | 휘휘 | 2010.07.05 | 18255 |
44 |
11. Static SQL 구현을 위한 기법들
![]() | 실천하자 | 2010.07.05 | 12087 |
43 | 10. Dynamic SQL 사용 기준 | balto | 2010.07.04 | 8643 |
42 | 9. Static vs. Dynamic SQL [1] | balto | 2010.07.04 | 18350 |
41 | 8. 애플리케이션 커서 캐싱 | 토시리 | 2010.06.29 | 6613 |
40 |
7. 세션 커서 캐싱
![]() | 토시리 | 2010.06.29 | 10621 |
39 |
6. 바인드 변수의 부작용과 해법
![]() | 실천하자 | 2010.06.28 | 14681 |
38 | 5. 바인드 변수의 중요성 | 실천하자 | 2010.06.28 | 11768 |
37 | 4장. 라이브러리 캐시 최적화 원리 | 휘휘 | 2010.06.28 | 6916 |
36 |
2. SQL 처리과정
![]() | 휘휘 | 2010.06.28 | 15756 |
35 |
1. SQL과 옵티마이저
![]() | 휘휘 | 2010.06.28 | 7218 |
34 |
4. 커서 공유
![]() | balto | 2010.06.28 | 9201 |
33 |
3. 라이브러리 캐시 구조
![]() | balto | 2010.06.28 | 9852 |
32 | 6. V$SYSTEM_EVENT | 토시리 | 2010.06.14 | 6523 |
31 | 10. V$SQL | 실천하자 | 2010.06.14 | 12685 |
30 |
5. V$SYSSTAT
[1] ![]() | 토시리 | 2010.06.14 | 9851 |
29 |
12. 데이터베이스 성능 고도화 정석 해법
![]() | 휘휘 | 2010.06.14 | 7153 |
28 | 11. End-To-End 성능관리 | 휘휘 | 2010.06.14 | 8095 |