SQL profile 수락, 비활성화, 삭제
Oracle성능명령어
-- 1) Accept the profile recommended by the tuning task:
DECLARE
l_name VARCHAR2(128);
BEGIN
l_name := DBMS_SQLTUNE.ACCEPT_SQL_PROFILE(
task_name => '<task_name>',
name => 'PROF_<sql_id>',
description => 'STA recommendation, CHG-1234',
force_match => TRUE, -- also matches statements differing only in literals
replace => TRUE);
DBMS_OUTPUT.PUT_LINE('Profile: ' || l_name);
END;
/
-- 2) Profiles and the cursors using them:
SELECT name, category, status, force_matching,
TO_CHAR(created,'YYYY-MM-DD HH24:MI') AS created
FROM dba_sql_profiles
ORDER BY created DESC;
SELECT sql_id, child_number, plan_hash_value, sql_profile
FROM v$sql
WHERE sql_profile IS NOT NULL;
-- 3) Temporarily disable / drop:
EXEC DBMS_SQLTUNE.ALTER_SQL_PROFILE(name => 'PROF_<sql_id>', attribute_name => 'STATUS', value => 'DISABLED');
EXEC DBMS_SQLTUNE.DROP_SQL_PROFILE(name => 'PROF_<sql_id>', ignore => TRUE);하는 일
SQL profile은 옵티마이저에 추가적인 카디널리티/선택도 보정(OPT_ESTIMATE 등)을 제공하여 SQL 텍스트를 바꾸지 않고 더 나은 계획을 만들게 한다. FORCE_MATCH를 사용하면 리터럴만 다른 문장에도 적용된다.
사용 시점
SQL을 변경할 수 없을 때(패키지 애플리케이션), STA가 검증된 개선을 권장할 때, 또는 실행 계획 회귀의 빠른 해결책으로.
주의
Tuning Pack 라이선스가 필요하다. profile은 계획을 "고정"하지 않고 추정치를 보정하므로 데이터 분포가 바뀌면 계획이 여전히 바뀔 수 있다. 계획 안정성이 필수라면 SQL plan baseline을 사용한다. 둘 다 있으면 옵티마이저는 baseline의 accepted 계획 중에서 선택한다. 수락하기 전에 항상 검증 결과(보고서의 'Validation results' 섹션)를 읽는다.