Q : 11g NF 중 하나인 SPM 사용시에 SQL이 baseline에 등록되는 기준은 무엇일까?
(optimizer_capture_sql_plan_baselines 파라미터를 이용한 자동 등록일 경우)
A : SQL이 두번째 실행될 때 등록됨.
테스트
shared pool flush를 한번 해준다.
alter system flush shared_pool;
파라미터를 설정
SQL> alter system set optimizer_capture_sql_plan_baselines = false;
시스템이 변경되었습니다.
SQL> alter system set optimizer_capture_sql_plan_baselines = true;
시스템이 변경되었습니다.
SQL을 실행한다.
SQL> select /* jgh_test */ * from dual;
D
-
X
SQL> select sql_text
from dba_sql_plan_baselines
where sql_text like 'select /* jgh_te%'; 2 3
선택된 레코드가 없습니다.
SQL> select sql_text, version_count, executions, loads
from v$sqlarea
where sql_text like 'select /* jgh_te%'; 2 3
SQL_TEXT VERSION_COUNT EXECUTIONS LOADS
-------------------------------------------------- ------------- ---------- ----------
select /* jgh_test */ * from dual 1 1 1
같은 SQL을 두번째 실행한다.
SQL> select /* jgh_test */ * from dual;
D
-
X
baseline 뷰에 등록되었는지 확인한다. 등록되었다.
SQL> select sql_text
from dba_sql_plan_baselines
where sql_text like 'select /* jgh_te%'; 2 3
SQL_TEXT
--------------------------------------------------
select /* jgh_test */ * from dual
실행횟수가 2인 것을 확인할 수 있다. 결론은 하드파싱이 발생횟수가 2회라서 그런 것은 아니고,
실행이 2번째라서 baseline 뷰에 등록이 되었다.
SQL> select sql_text, version_count, executions, loads
from v$sqlarea
where sql_text like 'select /* jgh_te%'; 2 3
SQL_TEXT VERSION_COUNT EXECUTIONS LOADS
-------------------------------------------------- ------------- ---------- ----------
select /* jgh_test */ * from dual 1 2 1
다시 파라미터를 원래대로 변경한다.
alter system set optimizer_capture_sql_plan_baselines = false;
추가 질문
버전카운트 증가시에도 등록이 되나?
SQL> alter system flush shared_pool;
시스템이 변경되었습니다.
SQL> alter system set optimizer_capture_sql_plan_baselines = true;
시스템이 변경되었습니다.
SQL> select /* jgh_test2 */ * from dual;
D
-
X
SQL> select sql_text
from dba_sql_plan_baselines
where sql_text like 'select /* jgh_test2%'; 2 3
선택된 레코드가 없습니다.
SQL> select sql_text, version_count, executions, loads
from v$sqlarea
where sql_text like 'select /* jgh_test2%'; 2 3
SQL_TEXT VERSION_COUNT EXECUTIONS LOADS
-------------------------------------------------- ------------- ---------- ----------
select /* jgh_test2 */ * from dual 1 1 1
optimizer 관련 파라미터를 변경한다.
SQL> alter system set optimizer_mode = 'FIRST_ROWS';
시스템이 변경되었습니다.
같은 SQL을 두번째 실행한다.
SQL> select /* jgh_test2 */ * from dual;
D
-
X
baseline에 등록되었다.
SQL> select sql_text
from dba_sql_plan_baselines
where sql_text like 'select /* jgh_test2%'; 2 3
SQL_TEXT
--------------------------------------------------
select /* jgh_test2 */ * from dual
역시 실행횟수가 baseline 등록여부를 결정한다.
optimizer 관련 변수가 변경되어 version_count가 1증가하였다.
SQL> select sql_text, version_count, executions, loads
from v$sqlarea
where sql_text like 'select /* jgh_test2%'; 2 3
SQL_TEXT VERSION_COUNT EXECUTIONS LOADS
-------------------------------------------------- ------------- ---------- ----------
select /* jgh_test2 */ * from dual 2 2 2
파라미터를 원래대로 변경
SQL> alter system set optimizer_capture_sql_plan_baselines = false;
시스템이 변경되었습니다.
'Oracle > Admin' 카테고리의 다른 글
db_files 꽉 찬 후에도 redo log 추가는 가능한가? (0) | 2012.09.18 |
---|---|
session_cached_cursors (0) | 2012.09.18 |
compress 옵션 (1) | 2011.10.06 |
[펌] DDB 기본기능 및 분산 트랜잭션 문제의 해결(2pc pending) (0) | 2011.07.27 |
audit trail 설정 vs audit trail 미설정 비교 (1) | 2011.05.25 |