-- test
SQL> alter session set session_cached_cursors = 10;
세션이 변경되었습니다.
SQL> alter system flush shared_pool;
시스템이 변경되었습니다.
SQL> select /*bshman_t*/* from bshman_t
2 where col1='a';
SQL> select parse_calls, users_opening, users_executing
2 from v$sql
3 where sql_text like '%/*bshman_t*/%'
4 and sql_text not like '%*v$sql*%';
PARSE_CALLS USERS_OPENING USERS_EXECUTING
----------- ------------- ---------------
1 0 0
SQL> select /*bshman_t*/* from bshman_t
2 where col1='a';
SQL> select parse_calls, users_opening, users_executing
2 from v$sql
3 where sql_text like '%/*bshman_t*/%'
4 and sql_text not like '%*v$sql*%';
PARSE_CALLS USERS_OPENING USERS_EXECUTING
----------- ------------- ---------------
2 0 0
SQL> select /*bshman_t*/* from bshman_t
2 where col1='a';
SQL> select parse_calls, users_opening, users_executing
2 from v$sql
3 where sql_text like '%/*bshman_t*/%'
4 and sql_text not like '%*v$sql*%';
PARSE_CALLS USERS_OPENING USERS_EXECUTING
----------- ------------- ---------------
3 1 0
-- session_cached_cursors = 0으로 해봄...
SQL> alter session set session_cached_cursors = 0;
세션이 변경되었습니다.
SQL> alter system flush shared_pool;
시스템이 변경되었습니다.
SQL> select /*bshman_t*/* from bshman_t
2 where col1='a';
SQL> select parse_calls, users_opening, users_executing
2 from v$sql
3 where sql_text like '%/*bshman_t*/%'
4 and sql_text not like '%*v$sql*%';
PARSE_CALLS USERS_OPENING USERS_EXECUTING
----------- ------------- ---------------
1 0 0
SQL> select /*bshman_t*/* from bshman_t
2 where col1='a';
SQL> select /*bshman_t*/* from bshman_t
2 where col1='a';
SQL> select /*bshman_t*/* from bshman_t
2 where col1='a';
SQL> select parse_calls, users_opening, users_executing
2 from v$sql
3 where sql_text like '%/*bshman_t*/%'
4 and sql_text not like '%*v$sql*%';
PARSE_CALLS USERS_OPENING USERS_EXECUTING
----------- ------------- ---------------
4 0 0
- 파라미터 값을 0으로 설정후 테스트
SQL> create table t (x number);
테이블이 생성되었습니다.
SQL> select a.name, b.value
2 from v$statname a, v$mystat b
3 where a.name in('session cursor cache hits','parse count (total)')
4 and b.statistic# = a.statistic#;
NAME VALUE
---------------------------------------------------------------- ----------
session cursor cache hits 649
parse count (total) 1888
SQL> alter session set session_cached_cursors =0;
세션이 변경되었습니다.
SQL> declare
2 i number;
3 begin
4 for i in 1 .. 10000
5 loop
6 execute immediate 'insert into t values(' || mod(i, 100) || ')';
7 end loop;
8 end;
9 /
PL/SQL 처리가 정상적으로 완료되었습니다.
SQL> select a.name, b.value
2 from v$statname a, v$mystat b
3 where a.name in('session cursor cache hits','parse count (total)')
4 and b.statistic# = a.statistic#;
NAME VALUE
---------------------------------------------------------------- ----------
session cursor cache hits 649
parse count (total) 11910
위 테스트로 parse call 이 10000번 가량 발생한걸 확인할수있다.
- 파라미터 값을 100으로 설정후 테스트
SQL> alter session set session_cached_cursors =100;
세션이 변경되었습니다.
SQL> declare
2 i number;
3 begin
4 for i in 1 .. 10000
5 loop
6 execute immediate 'insert into t values(' || mod(i, 100) || ')';
7 end loop;
8 end;
9 /
PL/SQL 처리가 정상적으로 완료되었습니다.
SQL> select a.name, b.value
2 from v$statname a, v$mystat b
3 where a.name in('session cursor cache hits','parse count (total)')
4 and b.statistic# = a.statistic#;
NAME VALUE
---------------------------------------------------------------- ----------
session cursor cache hits 9955
parse count (total) 21923
parse count가 올라가는건 확인하지만
session_cursor_cache_hits 율이 올라간걸 확인할수있다.
- 세션커서 캐시 히트율
SQL> select a.value "session cursor cache hits",
2 b.value "total parse call count",
3 round(a.value/b.value*100,2) "session cursor cache hits%"
4 from v$sysstat a, v$sysstat b
5 where a.name = 'session cursor cache hits'
6 and b.name = 'parse count (total)';
session cursor cache hits total parse call count session cursor cache hits%
------------------------- ---------------------- --------------------------
127595 139385 91.54
- 강좌 URL : http://www.gurubee.net/lecture/3102
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.