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 的已接受计划中进行选择。接受之前务必阅读验证结果(报告中的 'Validation results' 部分)。

在 DBAtlas 中打开 →

相关内容