OS환경 : Oracle Linux 7.6 (64bit)
DB 환경 : Oracle Database 19.10.0.0
방법 : 오라클 19c cursor_sharing 테스트
cursor_sharing 파라미터를 테스트 해봄
cursor_sharing은 일시적으로 바인드변수에 대한 하드파싱 문제를 해결할 수 있지만 완전한 해결책은 아님
force 이면 컬럼 히스토그램을 사용하지 못하므로 고정된 실행계획을 사용한다고함
cursor_sharing 파라미터 옵션 설명
exact(기본값) : 확히 일치하는 텍스트가 있는 명령문만 동일한 커서를 공유함
force : 기존 커서를 공유하거나 커서 계획이 최적이 아닌 경우 새 커서를 만들 수 있음
similar : Oracle 11gR2 이후부터 더 이상 사용되지 않는 값
리터럴 쿼리 실행
1
2
3
|
SQL>
select * from emp where ename = 'LITERAL1';
select * from emp where ename = 'LITERAL2';
|
shared pool에서 리터럴 쿼리 확인
1
2
3
4
5
6
7
8
9
10
11
12
|
SQL>
col sql_text for a60
select sql_text,
executions
from v$sqlarea
where instr(sql_text, 'select * from emp where ename') > 0
and instr(sql_text, 'sql_text') = 0
order by sql_text;
SQL_TEXT EXECUTIONS
------------------------------------------------------------ ----------
select * from emp where ename = 'LITERAL1' 1
select * from emp where ename = 'LITERAL2' 1
|
세션레벨로 cursor_sharing 파라미터 force로 변경
1
2
3
|
SQL> alter session set cursor_sharing=force;
Session altered.
|
새로운 값으로 리터럴 쿼리 실행
1
2
3
|
SQL>
select * from emp where ename = 'LITERAL3';
select * from emp where ename = 'LITERAL4';
|
shared pool에서 리터럴 쿼리 재확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
SQL>
col sql_text for a60
select sql_text,
executions
from v$sqlarea
where instr(sql_text, 'select * from emp where ename') > 0
and instr(sql_text, 'sql_text') = 0
order by sql_text;
SQL_TEXT EXECUTIONS
------------------------------------------------------------ ----------
select * from emp where ename = 'LITERAL1' 1
select * from emp where ename = 'LITERAL2' 1
select * from emp where ename = :"SYS_B_0" 2
|
리터럴 쿼리가 :"SYS_B_0"으로 자동으로 바인드 변수처럼 변함
참조 : https://oracle-base.com/articles/9i/cursor_sharing
http://bysql.net/w201002/5943
https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/CURSOR_SHARING.html
'ORACLE > Performance Tuning ' 카테고리의 다른 글
오라클 19c insert append, append_values 힌트 Direct path, 실행계획 테스트 (0) | 2022.11.04 |
---|---|
오라클 19c 하드파싱 쿼리 플랜 변경 의심시 조치방법 (0) | 2022.10.09 |
오라클 19c 실행계획 변경 시 spm 적용 방법 (0) | 2022.08.08 |
오라클 11gR2 파티션 변경(split, drop, add) 시 커서 상태 변화 확인 (0) | 2022.07.18 |
오라클 19c itas 시 full scan과 index scan 속도 비교 테스트 (2) | 2022.04.13 |