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. Профиль не "фиксирует" план; он корректирует оценки, поэтому план всё ещё может измениться при изменении распределения данных. Если стабильность плана обязательна, используйте SQL plan baseline. Если существуют оба, оптимизатор выбирает среди принятых планов baseline. Перед принятием всегда читайте результаты проверки (раздел отчёта 'Validation results').

Открыть в DBAtlas →

Связанные материалы