database.sarang.net
UserID
Passwd
Database
ㆍDBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DBMS Q&A 1136 게시물 읽기
No. 1136
Cursor사용시 DBMS Call관련 질문
작성자
임혜순
작성일
2005-06-10 14:21ⓒ
2005-06-10 14:51ⓜ
조회수
9,498

 

제가 알기로는 Cursor사용시 Cursor를 Open하는 경우

이미 해당 Select의 Result Set에 Lock이 걸리고

Select된 Result Set이 임시버퍼에 저장되고

Fetch시마다 이를 Pointer를 이동하여 한건씩 가져온다고 알고 있습니다.

 

문제는 대량의 데이터를 가지고 올때 Select시 Result Set 모두를 버퍼에 가져올것 같지는 않은데

Cusor의 Life Cycle(Delcare, Open, Fetch, Close)에 따른 DBMS Call 및 메모리관리는

어떻게 되는지 궁금합니다.

(예:Open시 DBMS Call과 함께 Result Set을(크든, 작든 모두) 가져온다.

Fetch시 DBMS Call과 함께 한건씩 메모리(Array Fetch시 여러건)를 가져온다. 즉 Fetch만큼 DBMS Call이 이루어진다.)

이 글에 대한 댓글이 총 1건 있습니다.

+ Cursor declare

이과정에서 DBMS는 SQL 질의문을 parsing, optimize를 하고

실행 계획을 수립합니다. 이 상태를 prepared라고 합니다.

 

+ Cursor open

이 상태에서 DBMS는 앞서 만들어 놓은 실행계획에 따라

SQL문을 실행합니다. 이 상태를 execution이라 하는데

결과가 만약 100,000만건이라고 한다면 (사실 실행을 다 해보기전까진

100,000건이라고 알수는 없죠...)

결과를 모두 메모리에 적재한 후에 client에게 보내는게 아니라,

통신 단위만큼 처리한 후에 client로 보내게 됩니다.

즉, DBMS가 결과를 통신 버퍼에 기록하다가 통신버퍼가 가득차면

처리를 멈추고 client에게 보내게 됩니다.

최초 open후 100,000건 중에 통신 단위 (예를 들어 한 1,000건)만큼만

client로 보냅니다.

그러면 client 메모리 영역에는 1,000건의 데이터가 쌓입니다.

 

+ Cursor Fetch

이 단계에서는 통신 버퍼로부터 client의 application 변수에 데이터를 카피합니다.

한건씩...

1000건이 모두 처리되면,

DBMS에게 다른 1,000건을 요구하게 됩니다.

그러면 DBMS는 계속 처리를 해서 다음 1,000건을 통신버퍼에 기록하게 되고 client 메모리에 다음 1,000건이 쌓입니다.

 

+ Cursor close

이 단계에서는 client의 메모리를 해제하고 DBMS에 신호를 보냅니다.

 

결과적으로,

1. DBMS는 결과 데이터를 모두다 client에게 한번에 보내지 않습니다.

2. fetch시 매번 dbms call이 이루어 지지는 않습니다.

 (위 예로 100,000/1,000번만큼 dbms call이 이루어지겠죠)

 

손우상(kumdory)님이 2005-06-15 16:34에 작성한 댓글입니다.
이 댓글은 2005-06-15 16:38에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
1141중복을 제거한 값을 뽑고자 합니다. [5]
배한직
2005-07-02
10610
1139쿼리문 작성.. 도와주세요.. ㅠㅠ [3]
김중생
2005-06-16
9596
1137MFC,C#,JAVA 를 이용한 데이터베이스 프로그래밍의 핵심기술 [1]
이영훈
2005-06-14
10495
1136Cursor사용시 DBMS Call관련 질문 [1]
임혜순
2005-06-10
9498
1135튜닝에 관한 문제인데.. 좀 봐주세요! [2]
박정민
2005-06-07
9200
1134관계대수 관련 질문입니다.^^ [2]
박옥주
2005-06-06
9186
1133일정관리 시스템 팀프로젝트..어떻게 해야 하나요? [1]
박병관
2005-06-03
9194
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.049초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다