DBAtlas · 데이터베이스 운영 아틀라스

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' 섹션)를 읽는다.

DBAtlas에서 열기 →

관련 항목