56-Oracle SQL Tuning Advisor(STA)

各位小伙伴,一般都用哪些优化工具,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_snapshot3  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 NULLAND ash.TIME_WAITED > 100
ORDER BY ash.SAMPLE_TIME DESC;  -- 按采样时间排序
---
 2. 调优任务通过(sql_id、sql_text)建立
-- 创建任务(支持 SQL_ID 或 SQL 文本),从AWR或是top sql中查询SQL ID
--通过
DECLAREtask_name VARCHAR2(30);
BEGINtask_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 fromsys.obj$ o where o.obj# = c.obj#))and c.obj# < :1  andrownum <=  :2
………………
ALTERNATIVE PLANS SECTION
---------------------------------------------------------
----------------------Plan 1
------Plan Origin                 :Cursor Ca
chePlan Hash Value             :159303012Executions                  :42Elapsed Time                :0.006 secCPU Time                    :0.005 secBuffer Gets                 :2680Disk Reads                  :2Disk Writes                 :0Notes: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
BEGINDBMS_SQLTUNE.ACCEPT_SQL_PROFILE(task_name => 'tuning_task1',name      => 'profile_force_index',force_match => TRUE  -- 12c+ 支持结构相似 SQL 匹配);
END;
/-- 手工创建 Profile(强制索引)
BEGINDBMS_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);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/84562.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/84562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

修改element-plus的主题色css变量

提示&#xff1a;本文仅是记录我修改element-plus等组件库的css变量&#xff0c; 具体【实现主题色切换看这篇】即可 文章目录 1.文件划分2.src/style/index.scss入口文件3.src/style/theme.scss主题色切换维护4.src/style/_color-utils.scss动态生成element-plus的scss变量5.…

Vibe Coding - 进阶 Cursor Rules

文章目录 为什么要配置 .cursorrules使用 .cursorrules 的五大优势 如何创建与应用 .cursorrules✅ 基础步骤&#x1f6e0; 创建方式&#xff1a; 高质量 .cursorrules 文件&#xff0c;应包含以下内容配置示例Java 项目TypeScript React 项目总结 cursorrules 推荐网站 为什么…

腾讯云自动化助手(TAT)技术评估报告

摘要 腾讯云自动化助手&#xff08;TAT&#xff09;作为云服务器&#xff08;CVM&#xff09;与轻量应用服务器&#xff08;Lighthouse&#xff09;的原生运维工具&#xff0c;通过无密码批量命令执行&#xff08;Shell/Python/PowerShell&#xff09;、交互式会话管理及公共命…

【simulink】IEEE5节点系统潮流仿真模型(2机5节点全功能基础模型)

主要内容 该模型为simulink仿真模型&#xff0c;主要实现的内容如下&#xff1a; 模型是基于 Simulink 搭建的电力系统潮流计算仿真模型&#xff0c;围绕2 台发电机、5 个节点的拓扑结构构建&#xff0c;用于电力系统稳态分析&#xff0c;是电力系统研究、教学及工程实践中…

责任链模式详解

责任链模式 场景 顾名思义&#xff0c;责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;为请求创建了一个接收者对象的链。这种模式给予请求的类型&#xff0c;对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中&#x…

Taro 跨端应用性能优化全攻略:从原理到实践

引言&#xff1a;为什么需要性能优化&#xff1f; 在当今移动互联网时代&#xff0c;用户体验已经成为决定产品成败的关键因素。根据 Google 的研究&#xff0c;页面加载时间每增加 1 秒&#xff0c;移动端转化率就会下降 20%。对于使用 Taro 开发的跨端应用来说&#xff0c;性…

Git集成Jenkins通过Pipeline方式实现一键部署

Docker方式部署Jenkins 部署自定义Docker网络 部署Docker网络的作用&#xff1a; 隔离性便于同一网络内容器相互通信 # 创建名为jenkins的docker网络 docker network create --subnet 172.18.0.0/16 --gateway 172.18.0.1 jenkins# 查看docker网络列表 docker network ls# …

磐基PaaS平台MongoDB组件SSPL许可证风险与合规性分析(下)

#作者&#xff1a;任少近 3.7.条款六&#xff1a;非源代码形式分发 官方原文如下&#xff1a; 原文关键部分&#xff1a;“You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License.” 解读&#xff1a;“您不得…

桌面小屏幕实战课程:DesktopScreen 2 第一个工程

飞书文档http://https://x509p6c8to.feishu.cn/docx/doxcnkGhtbxcv8ge5wKFkunsgmm 一、创建工程 cd ~/esp cp -r esp-idf/examples/get-started/hello_world . cd ~/esp/hello_world//设置目标板卡相关 idf.py set-target esp32//可配置工程属性 idf.py menuconfig 工程源码…

华为云Flexus+DeepSeek征文|体验华为云ModelArts快速搭建Dify-LLM应用开发平台并搭建查询数据库的大模型工作流

华为云FlexusDeepSeek征文&#xff5c;体验华为云ModelArts快速搭建Dify-LLM应用开发平台并搭建查询数据库的大模型工作流 什么是华为云ModelArts 华为云ModelArts ModelArts是华为云提供的全流程AI开发平台&#xff0c;覆盖从数据准备到模型部署的全生命周期管理&#xff0c…

【深度学习】TensorFlow全面指南:从核心概念到工业级应用

TensorFlow全面指南&#xff1a;从核心概念到工业级应用 一、TensorFlow&#xff1a;人工智能时代的计算引擎1.1 核心特性与优势 二、安装与环境配置2.1 版本选择建议2.2 GPU支持关键组件 三、TensorFlow核心概念解析3.1 数据流图(Data Flow Graph)3.2 张量(Tensor)&#xff1a…

在VTK中捕捉体绘制图像进阶(同步操作)

0. 概要 这段代码实现了一个VTK(Visualization Toolkit)应用程序,主要功能是: 读取DICOM医学图像序列并进行体绘制(Volume Rendering)创建一个主窗口显示3D体绘制结果创建一个副窗口显示主窗口的2D截图将副窗口中的交互操作(如旋转、缩放等)转发到主窗口,而不影响副窗…

使用NPOI库导出多个Excel并压缩zip包

使用NPOI库导出Excel文件可以按照以下步骤进行&#xff1a; 添加NPOI库的引用&#xff1a;在项目中添加对NPOI库的引用。 创建一个新的Excel文件对象&#xff1a;使用NPOI中的HSSFWorkbook&#xff08;对应.xls格式&#xff09;或XSSFWorkbook&#xff08;对应.xlsx格式&#…

【AGI】突破感知-决策边界:VLA-具身智能2.0

突破感知-决策边界&#xff1a;VLA-具身智能2.0 &#xff08;一&#xff09;技术架构核心&#xff08;二&#xff09;OpenVLA&#xff1a;开源先锋与性能标杆&#xff08;三&#xff09;应用场景&#xff1a;从实验室走向真实世界&#xff08;四&#xff09;挑战与未来方向&…

消融实验视角下基于混合神经网络模型的银行股价预测研究

链接: 项目链接_link 结果 模型消融&#xff1a; 特征消融&#xff1a; 中国银行_不同模型预测结果和模型评估可视化 招商银行_不同模型预测结果和模型评估可视化 模型评估可视化

MySQL存储引擎与架构

MySQL存储引擎与架构 1.1详细了解数据库类型 1.1.1关系型数据库 常见产品&#xff1a;MySQL&#xff08;免费&#xff09;、Oracle 关系型数据库模型是把复杂的数据结构归结为简单二维表格形式。通常该表第一行为字段名称&#xff0c;描述该字段的作用&#xff0c;下面是具体…

将浮点数转换为分数

原理 double 由以下部分组成&#xff1a; 符号位指数部分尾数部分 符号位的含义&#xff1a;为 0 表示正数&#xff0c;为 1 表示负数。指数部分的含义&#xff1a;在规格化数中&#xff0c;指数部分的整型值减去 1023 就是实际的指数值。在非规格化数中&#xff0c;指数恒为…

前端实现截图的几种方法

前端实现截图的几种方法 前端实现截图功能有多种方式&#xff0c;下面我将介绍几种常用的方法及其实现方案。 1. 使用 html2canvas 库 html2canvas 是最流行的前端截图解决方案之一&#xff0c;它可以将 DOM 元素转换为 canvas。 基本用法 import html2canvas from html2c…

TDengine 与开源可视化编程工具 Node-RED 集成

简介 Node-RED 是由 IBM 开发的基于 Node.js 的开源可视化编程工具&#xff0c;通过图形化界面组装连接各种节点&#xff0c;实现物联网设备、API 及在线服务的连接。同时支持多协议、跨平台&#xff0c;社区活跃&#xff0c;适用于智能家居、工业自动化等场景的事件驱动应用开…

OpenCV——图像形态学

图像形态学 一、像素的距离二、像素的邻域三、膨胀与腐蚀3.1、结构元素3.2、腐蚀3.3、膨胀 四、形态学操作4.1、开运算和闭运算4.2、顶帽和黑帽4.3、形态学梯度4.4、击中击不中 一、像素的距离 图像中像素之间的距离有多种度量方式&#xff0c;其中常用的有欧式距离、棋盘距离…