创建手动 SQL 配置文件以在不更改应用程序 SQL 的情况下注入提示。虽然这仍然是一项“DBA”任务,但它只需要运行一个命令,并且比 SQL 计划基线要简单得多。
使用下面的 PL/SQL 块。替换 SQL_ID、名称、描述和提示列表,然后向客户发送完整的命令。
--Large SQL statements are better loaded from SQL_ID.
declare
v_sql_id constant varchar2(128) := '2z0udr4rc402m'; --CHANGE ME
v_sql clob;
begin
--Find the SQL, it should be in one of these.
begin
select sql_fulltext into v_sql from gv$sql where sql_id = v_sql_id and rownum = 1;
exception when no_data_found then null;
end;
if v_sql is null then
begin
select sql_text into v_sql from dba_hist_sqltext where sql_id = v_sql_id and rownum = 1;
exception when no_data_found then
raise_application_error(-20000, 'Could not find this SQL_ID in GV$SQL or DBA_HIST_SQLTEXT.');
end;
end if;
--Create profile.
dbms_sqltune.import_sql_profile
(
sql_text => v_sql,
name => 'Some_Meaningful_Name', --CHANGE ME
description => 'Add useful description here.', --CHANGE ME
force_match => true,
profile => sqlprof_attr('full(a)', 'parallel(8)') --CHANGE ME
);
end;
/
“最佳”解决方案是深入研究客户的系统,找出他们与其他人不同的原因。他们是否有一些奇怪的优化器参数,是否禁用了统计作业等。但如果这是客户唯一的问题,那么我只需使用 SQL 配置文件并将其称为完成。