TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-06-17 |
제목 | CURSOR_SHARING의 사용 ( V8.1.6 NEW FEATURE ) | ||
---|---|---|---|
CURSOR_SHARING의 사용 ( V8.1.6 NEW FEATURE )
=========================================== Explanation ----------- 1. 용례 1) initSID.ora에 기술 : CURSOR_SHARING = { FORCE | EXACT } 2) Scope : Dynamic ( ALTER SESSION, ALTER SYSTEM ) 3) Default Value : EXACT 2. 설명 다음과 같은 두 개의 SQL 문장은 sql area의 cursor를 공유하지 못한다. SELECT ename, empno FROM emp where deptno = 10; SELECT ename, empno FROM emp where deptno = 20; -> 위 sql 문장에서 다른 부분은 모두 동일하나 binding variable을 사용하지 않고 각각 상수인 10, 20을 사용한다. 만약 두 가지 sql 문장이 cursor를 공유하도록 하기 위해서는 sql 문장을 다음과 같이 바꿀 수 있다. SELECT ename, empno FROM emp where deptno = :department_no; 하지만 이와 같이 바꾸는 것이 여의치 않을 경우 init 파라미터 파일이나 ALTER SYSTEM, ALTER SESSION 등의 명령으로 CURSOR_SHARING 값을 FORCE로 지정하면 된다. 3. 고려사항 CURSOR_SHARING 값을 FORCE로 지정하기 위해서는 다음과 같은 2가지 사항을 고려하여야만 한다. 1) SQL area에서 값을 제외한 다른 부분이 모두 동일한 문장이 많이 있는지 2) library cache miss가 높아 response time이 늦는지 * DSS 시스템에서는 CURSOR_SHARING 값을 FORCE로 지정할 경우 결과를 예측 하기 어려우므로 권장하지 않는다. 또한 복잡한 query나 query rewrite, stored outline을 사용할 경우에도 CURSOR_SHARING 값을 FORCE로 지정하는 것을 권장하지 않는다. 4. 성능 분석 환경 : Windows NT 4.0 ( Pentium 233MHz 1 CPU, 128M ) Oracle 8.1.6 시나리오 : 특정 table에 만 개의 row insert 1) Binding Variable을 사용하지 않고 CURSOR_SHARING 값이 EXACT인 경우 -> Total time elapsed : 80,496 msec. 2) Binding Variable을 사용하지 않고 CURSOR_SHARING 값이 FORCE인 경우 -> Total time elapsed : 61,699 msec. 3) Binding Variable을 사용할 경우 -> Total time elapsed : 21,561 msec. 위 결과에 따르면 동일한 sql 문장을 반복적으로 처리할 경우 binding variable을 사용하는 것이 가장 속도가 빠른 것으로 나타났으며, binding variable을 사용하지 않을 경우에도 CURSOR_SHARING 값이 FORCE일 경우 그렇지 않을 경우 약 23% 정도의 속도 개선 효과가 있음을 알 수 있다. from otn 오라클 유지보수 유건데이타 |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |