기준 사용을 활성화하려면 optimizer_use_sql_plan_baselines이 true이어야합니다.
SELECT * FROM dba_sql_plan_baselines
가장 저렴한 비용 또는 가장 좋은 경과 시간이있는 계획의 기준선을 고려하십시오. 옵티마이 저가 가장 저렴한 비용의 플랜을 선택하지만 고정 플랜을 선호합니다. 이것은 계획에 대한 힌트와 SQL 프로파일이 무엇인지에 관계없이 CBO가 계획을 사용하도록 보장하는 가장 좋은 방법입니다.
기준선을로드 한 다음 dba_sql_plan_baselines보기에서 SQL 핸들을 가져옵니다. 더 계획이 가능하게 될 계획
SET LONG 10000
SELECT DBMS_SPM.evolve_sql_plan_baseline(sql_handle => 'SQL_handle_xxxxxx') FROM dual;
var report clob;
exec :report := dbms_spm.evolve_sql_plan_baseline();
print :report
진화에만 작동합니다 : 에
시도는 사용 진화. 때로는
당신은 예를 들어,이 기준을 강제로 수정해야합니다
이
SET SERVEROUTPUT ON
DECLARE
l_plans_altered PLS_INTEGER;
BEGIN
l_plans_altered := DBMS_SPM.alter_sql_plan_baseline(
sql_handle => 'SQL_handle_xxxxxx',
plan_name => 'SQL_PLAN_xxxxxxx',
attribute_name => 'fixed',
attribute_value => 'YES');
DBMS_OUTPUT.put_line('Plans Altered: ' || l_plans_altered);
END;
/
보통 계획이 즉시 사용되지 않고 시도하고 강제하기위한 다양한 방법이 있습니다 ...
하나는 실행 가능한 경우 해당 명령문을 실행하는 모든 세션을 종료하는 것입니다.
또한 테이블을 사용하여 커서를 무효화 할 수 있습니다
begin
dbms_stats.gather_table_stats(ownname=> '<schema>',
tabname=> '<table>', no_invalidate => FALSE);
end;
분석을 또한 커서를 무효화 기존의 방법을 사용!
SQL> analyze table <table> estimate statistics sample 1 percent;
확인하려면 이벤트의
SQL> select child_number, executions, parse_calls, loads, invalidations
from v$sql where sql_id = '<SQLID>';
순서 :
- 잠금 사용자
- 을 무효화 모든 세션이 해당 사용자
로 로그인 커서
- 킬을
- 는 사용자에게
- 확인을 다시
의 잠금을 해제