Oracle 使用sql plan baseline 固定执行计划
SQL 计划基线是一个旨在使指定 SQL 语句的性能可以接受的执行计划。
从11g 开始,oracle 提供了执行计划管理SPM功能,方便DBA通过执行计划基线修正sql 错误的执行计划,避免sql 执行性能退化。
--create sql_plan_baseline from sql_tuning_task
begin
dbms_sqltune.create_sql_plan_baseline(task_name =>
'&sql_id_tuning_task', owner_name => 'SYS', plan_hash_value
=> '&plan_hash_value');
end;
/
--crete sql_plan_baseline from cursor
declare
i integer ;
begin
i:=dbms_spm.load_plans_from_cursor_cache(sql_id=>'&sql_id',plan_hash_value=>'&plan_hash_value');
dbms_output.put_line('导入完成!' );
end;
/
--crete sql_plan_baseline from awr
declare
i integer ;
begin
i:=dbms_spm.load_plans_from_awr(begin_snap => &begin_snap, end_snap => &begin_snap);
dbms_output.put_line('导入完成!' );
end;
/
--create sql_plan_baseline from sql tuning set
declare
i integer ;
begin
i := dbms_spm.load_plans_from_sqlset(
sqlset_name => 'sts_&sql_id'
);
dbms_output.put_line('导入完成!' );
end;
/
--automatic plan Capture by system optimizer
alter system optimizer_capture_sql_plan_baselines=true;
--drop sql_plan_baseline
set serveroutput on
declare
v_text pls_integer;
begin
v_text := dbms_spm.drop_sql_plan_baseline(sql_handle => '&sql_handle',plan_name => null);
dbms_output.put_line(v_text);
end;
/
--alert sql_plan_baseline (fix sql paln)
set serveroutput on
declare
v_text pls_integer;
begin
v_text := dbms_spm.alter_sql_plan_baseline(sql_handle => '&sql_handle',plan_name => 'sys_sql_plan_&sql_id',
attribute_name => 'fixed',attribute_value => 'yes');
dbms_output.put_line('plans altered: ' ||v_text );
end;
/
--evolve sql_plan_baseline(confirm and add accepted plan to baseline)
set serveroutput on
declare
l_plans_altered clob;
begin
l_plans_altered := dbms_spm.evolve_sql_plan_baseline(
sql_handle => '&sql_handle',
plan_name => 'sys_sql_plan_&sql_id',
verify =>'no',
commit =>'yes');
dbms_output.put_line('plans altered: ' || l_plans_altered);
end;
/
--query sql_plan_baseline
select t.sql_handle,t.sql_text,t.plan_name,t.enabled,t.accepted,t.fixed,t.origin from dba_sql_plan_baselines t;
本文来自博客园,作者:踏雪无痕2017,转载请注明原文链接:https://www.cnblogs.com/oradba/p/15667231.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)