56-Oracle SQL Tuning Advisor(STA)

Oracle性能优化与组内最值查询解决方案 本文还有配套的精品资源,点击获取 简介:Oracle数据库性能优化对于企业应用至关重要。本主题深入探讨Oracle优化器类型与调优策略,并讲解如何通过分析函数处理组内最值查询问题。同时,比较 IN 和 EXISTS 子句的差异,以及如何选择有效的查询执行计划来提高数据库性能。 1. Oracle数据库性能优化概述 在面对快速发展的... 阅读详情

各位小伙伴,一般都用哪些优化工具,Oracle SQL Tuning Advisor (STA)用的多吗,Profile就是它的其中1个产物,下一期再弄Profile,STA 的核心功能是自动化诊断高负载SQL的性能瓶颈​(如全表扫描、缺失索引),通过深度分析执行计划提供优化建议(如索引创建、SQL结构重写),并生成SQL Profile,不侵入、在不修改原SQL的前提下注入优化器指令,强制修正基数估计偏差或访问路径,从而提升查询效率。

​解放双手显著降低人工调优成本,尤其对复杂查询和大规模数据场景,能快速提供量化收益(如索引优化提升性能),还可以优化适配第三方封装SQL;不过优化同样不是万能的,STA依赖统计信息准确性(过期统计会导致建议失效)且仅针对单条SQL优化,可能忽略全局影响(如索引增加写负载),复杂逻辑场景需要人工参与和经验的判断。结合AWR定位TOP SQL后调用STA生成方案,关键建议需测试验证,并定期复审Profile有效性,以适配数据与业务侧的调整变更。

​一、STA技术原理与核心功能​
​1. 优化器双模式机制​
  • ​Normal 模式​:毫秒级生成执行计划,基于现有统计信息,受时间限制可能无法探索最优路径。
  • ​Tuning 模式​:通过 ​Automatic Tuning Optimizer (ATO)​​ 深度分析(分钟级),突破时间限制模拟多种路径,输出优化建议而非直接计划。
​2. 四大分析维度​
ATO在 Tuning 模式下执行,整合统计信息、索引、SQL 重写等多维度建议。:
  1. ​统计信息分析​检测缺失/过时的对象统计(如索引未分析)。
  2. ​访问路径分析​评估索引合理性,建议新建索引(如缺失高选择性索引)推荐缺失索引或物化视图(SQL Access Advisor)。
  3. ​SQL 结构分析​重写低效语法(如子查询解嵌套、NOT IN → NOT EXISTS)。
  4. ​SQL Profiling​注入动态采样或修正因子(如基数缩放),持久化存储于数据字典,优先级高于原始统计信息。
​3. SQL Profile 工作(单开一期)​
  • ​作用​:修正优化器成本计算误差(如基数估计偏差)。
  • ​优先级​:高于 SQL 文本中的 Hint,​不修改原 SQL​。
  • ​类型​:
    • ​自动 Profile​:由 STA 生成,动态适配数据变化。
    • ​手工 Profile​:强制指定执行计划(如固定连接顺序)。

二、演进过程与版本特性  

版本​

​关键特性​

​技术突破​

​10g

首次引入 STA

集成 AWR 高负载 SQL 捕获,支持基础分析

​11g

SQL Plan Management (SPM)

替代 Outline,支持执行计划稳定性控制

​12c

Adaptive Plans

运行时动态调整执行计划(如连接方式切换)

​19c

Automatic Indexing

自动创建/验证/删除索引,需启用AUTO_INDEX​

23ai​

AI 增强优化器

向量统计信息、自适应连接优化、直接连接语法

优化深度对比​: 

​模式​

​响应时间​

​优化深度​

​适用场景​

​Normal 模式​

毫秒级

浅层

常规 SQL 解析

​Tuning 模式​

分钟级

深度分析

高负载 SQL 优化

三、实践脚本(10g 至 23ai)​

1. 自动捕获高负载 SQL(10g~23ai)​
-- 查询V$SQL视图(实时TOP SQL)
SELECT sql_id, sql_text, executions, buffer_gets, disk_reads, elapsed_time
FROM v$sql 
WHERE buffer_gets > 10000   -- 过滤高内存消耗
   OR elapsed_time > 1000000 -- 过滤长耗时
ORDER BY elapsed_time DESC;  -- 按执行时间排序
-- 从 AWR 获取 TOP SQL ID
-- 创建AWR快照
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT('TYPICAL');  -- 起始快照

-- 等待高负载时段,后再次创建快照
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT('TYPICAL');  -- 结束快照

-- 查询快照ID
SELECT snap_id, begin_interval_time 
FROM dba_hist_snapshot 
ORDER BY snap_id DESC;
--
SELECT snap_id, begin_interval_time
FROM dba_hist_snapshot
  3  ORDER BY snap_id DESC;

   SNAP_ID BEGIN_INTERVAL_TIME
---------- ---------------------------------------------------------------------------
      7022 21-6月 -25 11.00.34.946 上午
      7021 21-6月 -25 10.00.22.850 上午
      7020 21-6月 -25 09.00.10.116 上午
      7019 21-6月 -25 08.00.58.180 上午
      7018 21-6月 -25 07.00.46.532 上午
-- 生成AWR报告中高负载SQL(查询下面手工输入变量快照ID)
SELECT sql_id, executions, buffer_gets, disk_reads, elapsed_time, sql_text
FROM dba_hist_sqlstat 
WHERE snap_id BETWEEN &start_snap AND &end_snap   -- 替换为实际快照ID
ORDER BY buffer_gets DESC;  -- 按内存消耗排序
--不用awr,直接用ASH查询sql_id
-- 使用ASH实时监控(10g+)
SELECT 
    ash.SQL_ID, 
    ash.SESSION_ID, 
    sq.SQL_TEXT,  -- 从 V$SQL 获取文本
    ash.WAIT_TIME, 
    ash.TIME_WAITED
FROM 
    V$ACTIVE_SESSION_HISTORY ash
JOIN 
    V$SQL sq ON ash.SQL_ID = sq.SQL_ID  -- 关联 SQL 文本视图
WHERE 
    ash.SQL_ID IS NOT NULL
    AND ash.TIME_WAITED > 100
ORDER BY 
    ash.SAMPLE_TIME DESC;  -- 按采样时间排序
---
 2. 调优任务通过(sql_id、sql_text)建立
-- 创建任务(支持 SQL_ID 或 SQL 文本),从AWR或是top sql中查询SQL ID
--通过
DECLARE
  task_name VARCHAR2(30);
BEGIN
  task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(
    sql_id        => 'dqucusk8avvuh',   -- 11g+ 支持
    --sql_text      => 'SELECT * FROM HR.EPMLOYEES WHERE salary > :1',
    --sql_text和上面的sql_id,二选一均可10g+
    scope         => 'COMPREHENSIVE',
    time_limit    => 60,
    task_name     => 'tuning_task1'
  );
  DBMS_SQLTUNE.EXECUTE_TUNING_TASK(task_name); -- 执行任务
END;
/
--PL/SQL 过程已成功完成。
-- 查看报告
SET LONG 1000000
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('tuning_task1') FROM DUAL; -- 输出优化建议
--
SYS@test19> SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('tuning_task1') FROM DUAL;

DBMS_SQLTUNE.REPORT_TUNING_TASK('TUNING_TASK1')
--------------------------------------------------------------------------------
GENERAL INFORMATION SECTION
----------------------------------------------------
---------------------------
Tuning Task Name   : tuning_task1
Tuning Task Owner  : SYS
Workload Type      : Single SQL Statement
Scope              : COMPREHENSIVE
Time Limit(seconds): 60
Completion Status  : COMPLETED
Started at         : 06/21/2025 12:12:15
Completed at       : 06/21/2025 12:12:15


----------------------------------------------------------
---------------------
Schema Name   : SYS
Container Name: PDBRS6
SQL ID        : dqucusk8avvuh
SQL Text      : delete /* KSXM:CLEAN_COL_USAG
E *//*+ dynamic_sampling(4) */
                 from sys.col_usage$ c   where
((timestamp < sysdate - 367)
                       or not exists
(select /*+ unnest */ 1 from
                sys.obj$ o where o.obj# = c.obj#))
    and c.obj# < :1  and
                rownum <=  :2
………………
ALTERNATIVE PLANS SECTION
---------------------------------------------------------
----------------------

Plan 1
------

  Plan Origin                 :Cursor Ca
che
  Plan Hash Value             :159303012

  Executions                  :42

  Elapsed Time                :0.006 sec

  CPU Time                    :0.005 sec

  Buffer Gets                 :2680

  Disk Reads                  :2

  Disk Writes                 :0

Notes:
  1. Statistics shown are averaged over multiple execu
tions.
  2. 在当前环境中无法重新生成具有 ID 1 的计划。由于此原因, 无法创建 SQL 计划基线以指示
Oracle 优化程序在将来选取该计划。

---------------------------------------------------------
----------------------------------------
------
| Id  | Operation                              | Name
         | Rows  | Bytes | Cost (%CPU)|
Time     |
-------------------------------------------------
----------------------------------------
--------------
|   0 | DELETE STATEMENT
  |              |       |       |    15
 (100)|          |
|   1 |  DELETE
      | COL_USAGE$   |       |       |
          |          |
|   2 |   COUNT STOPKEY                        |
     |       |       |            |
     |
|   3 |    FILTER                              |
         |       |       |            |
         |
|   4 |     TABLE ACCESS BY INDEX ROWID BATCHED|
COL_USAGE$   |   150 |  2700 |    15   (
0)| 00:00:01 |
|   5 |      INDEX RANGE SCAN
  | I_COL_USAGE$ |    27 |       |     2
   (0)| 00:00:01 |
|   6 |     INDEX SKIP SCAN
      | I_OBJ1       |     1 |     5 |
   2   (0)| 00:00:01 |
---------------------------------------------------------
SYS@test19>
3. SQL Profile 接受应用(11g+)​
-- 接受自动 Profile
BEGIN
  DBMS_SQLTUNE.ACCEPT_SQL_PROFILE(
    task_name => 'tuning_task1',
    name      => 'profile_force_index',
    force_match => TRUE  -- 12c+ 支持结构相似 SQL 匹配
  );
END;
/

-- 手工创建 Profile(强制索引)
BEGIN
  DBMS_SQLTUNE.IMPORT_SQL_PROFILE(
    name     => 'manual_profile',
    sql_text => 'SELECT * FROM orders WHERE order_id=:1',
    profile  => SQLPROF_ATTR('INDEX(orders idx_order_id)') -- 注入 Hint
  );
END;
/

四、注意事项与验证​

  • ​权限要求​:
GRANT ADVISOR, SELECT_CATALOG_ROLE TO user_STA; -- 基础权限
GRANT EXECUTE ON DBMS_SQLTUNE TO user_STA;      -- 必要执行权限
  • ​版本差异验证​:
  1. 10g:仅支持 SQL 文本调优,不支持 sql_id 参数。
  2. 19c:自动索引需启用 OPTIMIZER_AUTO_INDEX。
  3. 23ai:向量操作需安装 Vector Option 组件和依赖新发版的优化。
  • ​效果验证​:
-- 对比优化前后执行计划
--举例HR.EMPLOYEES
EXPLAIN PLAN FOR SELECT * FROM HR.EMPLOYEES WHERE salary > 5000;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
oracle调优STA无脑命令 文档为oracle调优的STA无脑命令,直接安装命令贴到sqlplus里面就好,sql_id号从awr报告里面获得,想调优的语句找到sql_id,替换到文档里面的sql_id位置,最后无脑贴进去就可以使用STA调优助手了。 立即下载

相关推荐

SQL Tuning Advisor使用总结

关于oracle的SQL Tuning Advisor全面的使用介绍,包括分析awr、cursor、sql_set、sql文本中获取sql并且建立、执行、获取结果的方法。并且介绍了sql_set,sql_profile的操作。里面涉及到的内容都有可执行的代码。

Oracle SQL 优化之sql tuning advisor (STA)

前言:经常可以碰到优化sql的需求,开发人员直接扔过来一个SQL让DBA优化,然后怎么办? 当然,经验丰富的DBA可以从各种方向下手,有时通过建立正确索引即可获得很好的优化效果,但是那些复杂SQL错综复杂的表关联,却让DBA们满头大汗。 如下特别介绍一种oracle官方提供的科学优化方法STA,经过实践,不敢说此特性绝对有效,但是可以开阔思路,并且从中学到许多知识,不再用“猜”的方式去创建索引了。 SQL优化器SQLTuningAdvisor(STA),是oracle的sql优化补助工具。...

liujinwei2005的专栏 780

避坑指南:时间序列互相关分析(CCF)常见的5个误用场景

本文详细解析了时间序列互相关分析(CCF)中常见的5个误用场景,包括忽视平稳性检验、混淆同期相关与因果关联、误读滞后阶数、忽略自相关干扰以及样本量不足等问题。通过实际案例和技术建议,帮助数据分析师避免这些陷阱,确保CCF分析的准确性和可靠性。

weixin_29064009的博客 428

使用SQL Tuning Advisor(STA)为sql提供优化建议

在Oracle10g之前,优化SQL是个比较费力的技术活,不停的分析执行计划,加hint,分析统计信息等等。 在10g中,Oracle推出了自己的SQL优化辅助工具:SQL优化器(SQLTuningAdvisor:STA),它可以给出优化建议。 使用STA一定要保证优化器是CBO模式下。 一 创建优化任务 可以通过传入文本来获取相应的优化建议,也可以通过sql_id方式获取。 1.1 传入文本方式 DECLARE my_task_nameVARCHAR2(30); ...

雅冰石的专栏 1635

FastApi教程

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本的传送协议。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。

小石潭记丶 1560

基于PWM的汽车仪表步进电机微步驱动优化实践

本文深入探讨了基于PWM的微步驱动技术,用于优化汽车仪表步进电机的运行性能。通过将传统的分步驱动升级为PWM微步细分驱动,利用正弦/余弦查表法合成旋转磁场,有效消除了指针抖动与噪声,实现了指针的平滑、精准运动。文章以STM32和VID2905电机为例,提供了详细的硬件连接、代码实现及高级优化技巧,为提升汽车仪表体验提供了实用方案。

weixin_29169505的博客 510

oracle使用SQL Tuning Advisor对SQL的调优-简单使用

使用SQL Tuning Advisor对SQL的调优-简单使用

aqj19990524的博客 1684

数仓项目6.0(一)

数据同步工具种类繁多,大致可分为两类,一类是以DataX、Sqoop为代表的基于Select查询的离线、批量同步工具,另一类是以Maxwell、Canal为代表的基于数据库数据变更日志(例如MySQL的binlog,其会实时记录所有的insert、update以及delete操作)的实时流式同步工具。DataX的使用,用户只需根据数据的数据源和目的地选择相应的Reader和Writer,并将Reader和Writer的信息配置在一个json文件中,然后执行如下命令提交数据同步任务即可。

qq_58551342的博客 2847

【Oracle中使用sta和hint进行性能优化】

Oracle中STA优化,HINT优化,RULE,FULL,多线程并行,解释执行计划

supermanAjxs的博客 1247

智能音箱麦克风阵列实战:Python实现宽带GSC波束形成(附完整代码)

本文从工程实战角度,详细介绍了如何在智能音箱中利用Python实现宽带GSC波束形成算法。文章深入解析了广义旁瓣消除器(GSC)的核心架构,包括固定波束形成、阻塞矩阵与自适应滤波路径,并提供了完整的仿真代码、关键参数(如LMS步长)调优方法,以及面向嵌入式部署的计算优化与移植考量,旨在帮助开发者构建在真实噪声环境下高效工作的语音增强系统。

opencv7vision的博客 342

更改训练好的yolo模型中的class类名,无需重新训练

本文介绍了如何在不重新训练YOLO模型的情况下修改其类名的技巧。关键点在于理解YOLO类名存储逻辑:类名列表(names)存储在配置文件中(.yaml),而非权重文件(.pt)。通过修改配置文件的类名列表(保持类别数量nc不变),即可实现类名更新。具体步骤包括:1)准备修改后的配置文件;2)加载模型并更新类名;3)验证推理结果。该方法适用于YOLOv5/YOLOv8等版本,能有效节省开发时间,适用于类名表述调整、多场景复用等需求。注意:增减类别需重新训练,仅修改类名时需确保类别数量一致。

yolo模型训练找我,AI游戏合作找我 878

ORACLE SQL TUNING ADVISOR

sql tunning advisor 使用的主要步骤:1 建立tunning task2 执行task3 显示tunning 结果4 根据建议来运行相应的调优方法 ----ADVISOR授权 1 基于SQL文本建立任务 FUNCTION create_tuning_task(sql_text IN CLOB,bind_list IN sql_binds := NULL,user_n...

weixin_34324081的博客 212

从码农到生态建造者:我的一人公司运作方案

华哥·OPC 运营方案 v1.0 - 第一次迭代 🚀,搭建闭环生态系统,赋能 AI 时代的超级个体,更好的做自己,同时照亮别人。

AaronZZH 的博客 994

20210131-Oracle SQL优化之sql tuning advisor

20210131-Oracle SQL优化之sql tuning advisor

chenoracle的博客 542

全功能爬虫框架:Botasaurus 的详细使用(现代化、反检测、高并发的智能爬虫框架)

Botasaurus是一个基于 Python 的全栈式智能数据采集框架。它深度融合了以下关键技术: 无头浏览器自动化(Headless Browser Automation):基于 Playwright 或 Puppeteer,支持 Chromium、Firefox、WebKit; 高级反检测引擎(Anti-Detection Engine):自动绕过 WebDriver、Canvas、AudioContext 等 50+ 种指纹检测; 声明式任务模型(Declarative Task Model):用装

数据知道的博客 4369

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Oracle SQL Tuning Advisor

Oracle SQL Tuning Advisor 可以帮助DBA分析SQL执行的性能,并提出多种解决方案。 SQL Tunning Advisor的使用方法 - Enterprise Manager(提供图形界面) - sqltrpt(针对单条SQL的诊断) - DBMS_SQLTUNE包,参见官方http://docs.oracle.com/cd/E11882_01/server.

937

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

sql调优之oracle SQL Tuning Advisor使用步骤

【代码】oracle SQL Tuning Advisor优化建议。

qq_43099227的博客 564

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Oracle SQL优化之STA(SQL Tuning Advisor)

前言:经常可以碰到优化sql的需求,开发人员直接扔过来一个SQL让DBA优化,然后怎么办? 当然,经验丰富的DBA可以从各种方向下手,有时通过建立正确索引即可获得很好的优化效果,但是那些复杂SQL错综复杂的表关联,却让DBA们满头大汗。 如下特别介绍一种oracle官方提供的科学优化方法STA,经过实践,不敢说此特性绝对有效,但是可以开阔思路,并且从中学到许多知识,不再用“猜”的方式去创建索引...

makai5521的博客 899

Oracle SQLTUNING优化SQL

Oracle SQLTUNING优化SQL

m0_37625564的博客 1885

Oracle(84)什么是SQL调优顾问(SQL Tuning Advisor)?

SQL调优顾问是Oracle数据库中的一个强大工具,通过自动分析SQL语句的性能并提供具体的优化建议,帮助DBA和开发人员优化SQL语句的性能。了解如何使用SQL调优顾问生成和分析调优报告,对于数据库性能调优至关重要。通过定期使用SQL调优顾问,可以识别和解决SQL语句的性能问题,从而提高数据库的整体性能。

qq_43012298的博客 1646

Oracle STA的使用

Oracle 10g之后的优化器支持两种模式,一个是normal模式,一个是tuning模式。在大多数情况下,优化器处于normal模式。基于CBO的normal模式只考虑很小部分的执行计划集合用于选择哪个执行计划,因为它需要在尽可能短的时间,通常是几秒或毫秒级来对当前的SQL语句进行解析并生成执行计划。因此并不能保证SQL语句每次都是使用最佳的执行计划。而tuning模式则将高负载的SQL语句直

IT小灰的笔记 2076

使用SQL tuning advisor(STA)自动优化SQL

Oracle 10g之后的优化器支持两种模式,一个是normal模式,一个是tuning模式。在大多数情况下,优化器处于normal模式。基于CBO的normal模式只考虑很小部分的执行计划集合用于选择哪个执行计划,因为它需要在尽可能短的时间,通常是几秒或毫秒级来对当前的SQL语句进行解析并生成执行计划。因此并不能保证SQL语句每次都是使用最佳的执行计划。而tuning模式则将高负载的SQL语句直

乐沙弥的世界 1万+

ORACLE SQL Tuning Advisor

前言:一直以来SQL调优都是DBA比较费力的技术活,而且很多DBA如果没有从事过开发的工作,那么调优更是一项头疼的工作,即使是SQL调优很厉害的高手,在SQL调优的过程中也要不停的分析执行计划、加HINT、分析统计信息等等。从ORACLE 10G开始,数据库采取了很多智能化的管理工作,其中SQL优化器(SQL Tuning Advisor:STA),大大的提高了DBA进行SQL优化的效率; 准备测试环境(创建两个表并插入数据) create table big_tab as select rownum as

weixin_42955647的博客 823

【oracle】oracle STA(SQL Tuning Advisor)

【oracle】oracle STA(SQL Tuning Advisor) STA(SQL Tuning Advisor):STA能快速定位性能瓶颈,从而为性能优化提供准确的依据。 --查看待优化sql的执行时间set serveroutput on;set t...

atr0812的博客 335

SQL Tuning Advisor

STA可以用来优化那些已经被发现的高负载SQL. 默认情况下, Oracle数据库在自动维护窗口中自动认证那些有问题的SQL并且执行优化建议,找寻提升高负载SQL执行计划性能的方法.** 如何查看自动优化维护窗口产生的报告?** 输入 **主要的输入来源就是ADDM, 默认情况下, ADDM每小时主动运行一次并通过分析awr收集的重要的统计信息来印证高负载的问题SQL.AWR第二个比较重要的输入源就是awr.

qq_29431123的博客 1002

Oracle SQL tuning 步骤

SQL是的全称是Structured Query Language(结构化查询语言)。SQL是一个在80年代中期被使用的工业标准数据库查询语言。不要把SQL语言与商业化产品如Microsoft SQL server或开源产品MySQL相混淆。所有的使用SQL缩略词的这些都是SQL标准的一部分。一、SQL tuning之前的调整 下面这个粗略的方法能够节省数千小时乏味的SQL...

anjichan4261的博客 509
上一篇: 55-Oracle-EXPLAIN PLAN(含23ai )实操
下一篇: 57-Oracle SQL Profile(23ai)实操
远方1609
博客等级 码龄22年 576粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值