三器合一,根治SQL痼疾,降低80%性能事故!

统计信息失真?索引失效?绑定变量窥视?

优化器的心思你猜不透

历史执行计划无处追溯

🎯 今天,解锁Oracle性能优化的“黄金三剑客”

1.SQLHC

Oracle SQLHC(SQL Health Check)是Oracle官方提供的免费、无侵入式性能诊断工具,专为深度排查SQL执行环境问题而设计。其核心作用在于通过系统化检查与SQL性能相关的关键环境因素,快速定位性能瓶颈,并提供精准优化建议!

用于检查单个SQL语句运行的环境,检查基于成本的
优化器(CBO)统计数据、模式对象元数据、配置参数和其他可能影响正在分析的SQL的性能!

sqlplus / as sysdba
SQL> sqlhc.sql "T" djkbyr8vkc64h

在这里插入图片描述

2.SQL Tuning Advisor

Oracle SQL Tuning Advisor(STA)是Oracle数据库内置的自动化SQL性能诊断与优化引擎,其核心作用是通过智能分析SQL执行环境,提供权威、可落地的调优建议,显著提升查询效率。

2.1 授权

CONNECT / AS SYSDBA
GRANT ADVISOR TO SH;
GRANT SELECT_CATALOG_ROLE TO SH;
GRANT EXECUTE ON DBMS_SQLTUNE TO SH

2.2 Create Task

SET SERVEROUTPUT ON
declare
stmt_task VARCHAR2(40);
begin
stmt_task := DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_id => '5etrekix123');
DBMS_OUTPUT.put_line('task_id: ' || stmt_task );
end;
/

select task_name from dba_advisor_log where owner='SH';

2.3 执行Task

Execute dbms_sqltune.Execute_tuning_task
(task_name => 'TEST_sql_tuning_task');

select status from dba_advisor_log 
where task_name='TEST_sql_tuning_task';

2.4 调优建议

set long 65536
set longchunksize 65536
set linesize 100
select dbms_sqltune.report_tuning_task('TEST_sql_tuning_task') 
from dual;

3. SQL Profile

SQL Profile 是⼀些信息的集合体,存储在数据字典中,使得 SQL 优化器可以为 SQL 语句产⽣最优的执⾏计划。

SQL Profile包含⾃动 SQL 调优期间发现的对产⽣错误执⾏计划的评估的纠正信息。这些信息能改善优化器的数据量(cardinality),选择率(selectivity)评估,⽽这些信息会指引优化器找到更好的执⾏计划

在这里插入图片描述

3.1 绑定执行计划

1.创建调优任务,指定需优化的SQL_ID

DECLARE
  l_task_name VARCHAR2(30);
BEGIN
  l_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(
    sql_id      => '&target_sql_id',  -- 替换为实际SQL_ID
    scope       => DBMS_SQLTUNE.SCOPE_COMPREHENSIVE,
    time_limit  => 3600,              -- 分析超时时间(秒)
    task_name   => 'sql_profile_tuning_task'
  );
END;
/

2.执行调优分析
EXEC DBMS_SQLTUNE.EXECUTE_TUNING_TASK(task_name => 'sql_profile_tuning_task');

3.获取优化建议报告
set long 10000
set longchunksize 1000
set linesize 100
set heading off
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK( 'sql_profile_tuning_task') from DUAL;
set heading on

4.接受SQL Profile
ECLARE
my_sqlprofile_name VARCHAR2(30);
begin
my_sqlprofile_name := DBMS_SQLTUNE.ACCEPT_SQL_PROFILE (
task_name => 'sql_profile_tuning_task',
name => 'my_sql_profile');
end;
/

在这里插入图片描述

3.2 EMCC自动管理

SQL Profiles 可以通过 Oracle 企业管理器(Enterprise Manager)的⾃动 SQL 调优流程部分来管理它。

使⽤EMCC:
1. 在 Performance ⻚⾯, 点击 Top Activity。
Top Activity ⻚⾯出现。
2. 在 Top SQL 下, 点击使⽤ SQL profile 的 SQL 语句的 SQL ID 链接。
SQL Details ⻚⾯显示出来。
3. 点击 Plan Control 栏。
SQL Profiles 和 Outlines 部分会显示 SQL Profile 的列表。
4. 选择想要管理的 SQL profile。
执⾏下⾯的任意操作 one of the following:
要启⽤⼀个当前被禁⽤的 SQL profile,点击 Disable/Enable。
要禁⽤⼀个当前被启⽤的 SQL profile,点击 Disable/Enable。
要删除⼀个 SQL profile,点击 Delete.
5. Confirmation ⻚⾯显示出来。
点击 Yes 来确认,或者 No 取消刚才的操作。

4.正确的执行计划

4.1 GATHER_PLAN_STATISTICS

SELECT /*+ GATHER_PLAN_STATISTICS */ * 
FROM orders 
WHERE order_date > SYSDATE - 30;

查看真实执行计划
SELECT * FROM 
TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL, NULL, 'ALLSTATS LAST'));

4.2 DBMS_XPLAN.DISPLAY_CURSOR

SELECT /*+ MONITOR */ * FROM employees WHERE department_id = 60;

SELECT sql_id, child_number, sql_text 
FROM v$sql 
WHERE sql_text LIKE '%SELECT /*+ MONITOR */ * FROM employees%'; 

查看真实执行计划
SELECT * FROM 
TABLE(DBMS_XPLAN.DISPLAY_CURSOR('sql_id', child_number, 'ALLSTATS LAST'));  
示例:
DBMS_XPLAN.DISPLAY_CURSOR('d1s3gf7g8sh9d', 0, 'ALLSTATS LAST')

总结

SQLHC速诊 → Tuning Advisor开方 → SQL Profile固效,形成自动化调优闭环,降低80%性能事故!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT邦德

客户部署资料,步骤超详细

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值