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
운영게시판
최근게시물
Oracle Tutorials 9262 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 9262
OPEN_CURSORS 파라미터를 매우 크게 잡을 경우 고려할 사항
작성자
정재익(advance)
작성일
2002-01-05 15:59
조회수
6,994

OPEN_CURSORS 파라미터를 매우 크게 잡을 경우 고려할 사항

 

원본출처 : http://211.209.69.159:8000/Orastudy/board.jsp?bbs=tiptech&pg=0&seq=365&act=view

 

OPEN_CURSORS 파라미터의 default 값은 50이나, 경우에 따라서 이 값을 매우 크게 잡게 될 경우 영향을 미칠 수 있는 점과 cursor가 commit 후에도 open 상태로 있는 것을 방지할 수 있는 방법에 대해 알아보기로 한다.

 

1. OPEN_CURSORS = n

 

이 파라미터는 한 session이 한번에 open할 수 있는 cursor의 최대 갯수이다.

이 값이 1이 증가할 때마다 약 25bytes를 fixed UG를 사용하므로, 이 값이 너무 크면 oracle의 memory 성능을 저해시키는 요인이 될 수 있다.

OPEN_CURSORS=1000 으로 설정하였을 경우 25 * 1000 = 25Kbytes 크기의 연속된 영역을 메모리에 할당하게 되는 것이다. 만약 MTS로 운영 중이라면 session의 UGA 정보는 PGA가 아닌 SGA에 저장이 된다는 것을 고려해야 하므로, 한 session의 cursor를 위한 영역을 할당하기 위해 shared pool에 cache되어 있는 다른 object에 영향을 미치면서까지 cache되어야 한다면 open_cursors 파라미터를 줄이는 것이 바람직하다.

 

2. CLOSE_CACHED_OPEN_CURSORS = TRUE

 

PL/SQL 내에서 close cursor를 하지 않았지만, commit은 자주 수행하도록 되어 있다면 process가 kill되거나 하면 session이 끊기면서 cursor는 자동으로 close되겠지만, close cursor를 했다 하더라도 cursor가 즉시 release되지 않는 경우가 있을 수 있다.

이 cursor가 자동으로 memory에서 release되는 time을 예측할 수 있으면 좋겠지만, 그렇지 못한 경우 아래와 같은 파라미터를 initSID.ora 화일에 셋팅해 놓으면 PL/SQL 또는 Pro*c 와 같은 application 내에서 commit 또는 rollback을 수행하면 cursor는 자동으로 close가 된다.

 

close_cached_open_cursors = true

 

즉, cursor를 memory에서 빨리 release시키는 것이 목적이라면 위와 같이 파라미터를 셋팅하는 방법도 있다는 것이다.

이 파라미터가 false로 되어 있다면 동일한 형태의 연속적인 executions가 새로운 cursor를 open할 필요가 없도록 하기 위하여 PL/SQL에 의해 open된 cursor를 open 상태 그대로 유지하겠다는 것을 의미한다.

 

이 파라미터에 대한 보다 자세한 내용은 다음과 같다.

PL/SQL을 사용할 때 해당 procedure에서 참조하는 object에 대해 그 안의 cursor들이 memory에 cache되어 있는데, commit 또는 rollback이 일어날 때 이 cursor들이 자동으로 close되도록 하는 역할을 한다.

즉, transaction 단위로 close한다. (commit, rollback)그러나, 이 값이 true로 되어 있으면 latch bottle-neck이 발생할 수 있으므로, true로 할지 false로 할지에 대해 신중하게 값을 결정해야 한다.

만약, application 내에서 재사용의 빈도가 매우 높은 SQL 문들을 사용한다면 memory 내에서 현재 수행 중인 object에 대해 그 object를 참조하는 cursor가 close되는 것이 좋지 않으므로, 이 값을 false로 설정해 두는 것이 바람직하다.

 

3. SESSION_CACHED_CURSORS = N

 

과거에 session_cached_cursors=n 이라는 파라미터도 존재했었다. session_cached_cursors 파라미터는 7.1까지만 존재하는 파라미터이다. 이 파라미터에 지정한 갯수는 한 session 동안 open된 상태로 cache에 유지할 수 있는 cursor의 갯수이다.

 

4. Pro*c 또는 PL/SQL 내에서 COMMIT WORK RELEASE;

 

commit 을 수행하면 현재 수행 중인 transaction을 종료시키고, db에 그 때까지의 변화들을 반영시키는 작업이 일어나고, 사용 중이던 resource들을 반환한다.PL/SQL 내에서는 commit을 했다 하더라도 아직 END가 완벽하게 마무리된 것은 아니므로, COMMIT WORK RELEASE; 를 해주면 모든 resource들을 free시키고 해당 session은 database로부터 disconnect하게 된다.

참고로 8.1.5 부터는 commit force; 라는 명령이 있는데 이것은 current transaction만을 commit 시키는 option이다.

 

5. CURSOR_SPACE_FOR_TIME = TRUE

 

이 파라미터는 shared sql 영역의 object를 참조하는 open cursor가 있는 한, 해당 object는 항상 shared pool에 keep시키는 역할을 한다

[Top]
No.
제목
작성자
작성일
조회
9265IP ADDRESS CHANGE IN SQL*NET
정재익
2002-01-05
4683
9264OPS : PCM Lock과 Non-PCM Lock에 대한 정리
정재익
2002-01-05
5326
9263Alter session kill에 대하여
정재익
2002-01-05
9125
9262OPEN_CURSORS 파라미터를 매우 크게 잡을 경우 고려할 사항
정재익
2002-01-05
6994
9261checkpoint not complete에 대해서
정재익
2002-01-05
7053
9260DBMS_SQL Package versus Native Dynamic SQL
정재익
2002-01-05
6316
92599i spfile 생성 및 수정 예제
정재익
2002-01-05
5972
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다