SQL Tuning Advisor

什么是SQL Tuning Advisor

STA可以用来优化那些已经被发现的高负载SQL. 默认情况下, Oracle数据库在自动维护窗口中自动认证那些有问题的SQL并且执行优化建议,找寻提升高负载SQL执行计划性能的方法.

** 如何查看自动优化维护窗口产生的报告? **

SQL> set serveroutput on size 100000;
SQL> var my_rept CLOB;
SQL> begin
:my_rept :=DBMS_AUTO_SQLTUNE.REPORT_AUTO_TUNING_TASK(
begin_exec => NULL,
end_exec => NULL,
type => ‘TEXT’,
level => ‘TYPICAL’,
section => ‘ALL’,
object_id => NULL,
result_limit => NULL);
END;
/

PL/SQL procedure successfully completed.

PRINT :my_rept

** 输入 **

  1. ADDM(Automatic Database Diagnostic Monitor)
    主要的输入来源就是ADDM, 默认情况下, ADDM每小时主动运行一次并通过分析awr收集的重要的统计信息来印证高负载的问题SQL.

  2. AWR
    第二个比较重要的输入源就是awr.

  3. Shared SQL Area(Shared Pool)

  4. SQL Tuning Sets(STS)
    需要了解SQL Tuning Set请参考文档sts.txt, SQL Tuning Set涵盖了SQL负载的大部分信息, 包括runtime统计信息,执行计划等信息.

** 优化选项 **

SQL Tuning Advisor提供了一些额外的选项用来管理优化任务的范围和和周期.您可将优化范围设置为以下值:

  1. Limited
    该情况下, SQLTA根据统计信息检查, access路径分析,SQL结构分析来生成建议.SQL Profile建议将不会产生.

  2. Comprehension
    该情况下, SQLTA产生Limitted情况下所有的输出并且增加SQL Profile的内容. 在Comprehension情况下,你也可以指定调优任务的限制时间, 默认情况下是30min.

** 运行SQLTA **

使用dbms_sqltune运行SQLTA需要以下步骤:

  1. 创建SQL Tuning Set(如果需要调优多个SQL)

  2. 创建SQL调优任务

  3. 执行sQL调优任务

  4. 查看调优任务结果

  5. 产生合适的建议

     	STS|create tuning task|execute tuning task|report tuning task|执行建议|
    

    | | | | |
    收集统计信息 创建SQL_Profile 创建索引 改写SQL SQL_Plan_Baseline

创建测试环境

(11G)NJL_TEST@testdb1> create table t1 (id number , name varchar2(20));

Table created.

(11G)NJL_TEST@testdb1> begin
2 for i in 1…10000
3 loop
4 insert into t1 values(i, ‘A’||i);
5 commit;
6 end loop;
7 end;
8 /

PL/SQL procedure successfully completed.

(11G)NJL_TEST@testdb1> select count(1) from t1;

COUNT(1)

 10000

Creating a SQL Tuninig Task

SQL> DECLARE
my_task_name VARCHAR2(30);
my_sqltext CLOB;
BEGIN
my_sqltext := ‘select count(1) from t1’;

my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(
sql_text => my_sqltext,
–bind_list => sql_binds(anydata.ConvertNumber(100)),
user_name => ‘NJL_TEST’,
scope => ‘COMPREHENSIVE’,
time_limit => 60,
task_name => ‘task_01’,
description => ‘Task to tune a query on a specified employee’);
END;
/

PL/SQL procedure successfully completed.

执行SQL调优任务

SQL> BEGIN
DBMS_SQLTUNE.EXECUTE_TUNING_TASK( task_name => ‘my_sql_tuning_task’ );
END;
/

PL/SQL procedure successfully completed.

Configuring a SQL Tuning Task

(11G)NJL_TEST@testdb1> BEGIN
DBMS_SQLTUNE.SET_TUNING_TASK_PARAMETER(
task_name => ‘task_01’,
parameter => ‘TIME_LIMIT’, value => 300);
END;
/

PL/SQL procedure successfully completed.

调优参数列表:

Parameter Description

MODE

Specifies the scope of the tuning task:

  • LIMITED takes approximately 1 second to tune each SQL statement but does not recommend a SQL profile

  • COMPREHENSIVE performs a complete analysis and recommends a SQL profile, when appropriate, but may take much longer.

USERNAME

  • Username under which the SQL statement is parsed

DAYS_TO_EXPIRE

  • Number of days before the task is deleted

DEFAULT_EXECUTION_TYPE

  • Default execution type if not specified by the EXECUTE_TUNING_TASK function when the task is executed

TIME_LIMIT

  • Time limit (in number of seconds) before the task times out

LOCAL_TIME_LIMIT

  • Time limit (in number of seconds) for each SQL statement

TEST_EXECUTE

  • Determines if the SQL Tuning Advisor test executes the SQL statements to verify the recommendation benefit:

  • FULL - Test executes SQL statements for as much of the local time limit as necessary

  • AUTO - Test executes SQL statements using an automatic time limit

  • OFF - Does not test execute SQL statements

BASIC_FILTER

  • Basic filter used for SQL tuning set

OBJECT_FILTER

  • Object filter used for SQL tuning set

PLAN_FILTER

  • Plan filter used for SQL tuning set

RANK_MEASURE1

  • First ranking measure used for SQL tuning set

RANK_MEASURE2

  • Second ranking measure used for SQL tuning set

RANK_MEASURE3

  • Third ranking measure used for SQL tuning set

RESUME_FILTER

  • Extra filter used for SQL tuning set (besides BASIC_FILTER)

SQL_LIMIT

  • Maximum number of SQL statements to tune

SQL_PERCENTAGE

  • Percentage filter of statements from SQL tuning set

查看SQL调优任务的状态

(11G)NJL_TEST@testdb1> SELECT status
FROM USER_ADVISOR_TASKS
WHERE task_name = ‘my_sql_tuning_task’; 2 3

STATUS

INITIAL

查看SQL调优任务的结果

SET LONG 100000
SET LONGCHUNKSIZE 100000
SET LINESIZE 100
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK( ‘task_01’)
FROM DUAL;

DBMS_SQLTUNE.REPORT_TUNING_TASK(‘TASK_01’)

GENERAL INFORMATION SECTION

Tuning Task Name : task_01
Tuning Task Owner : SYS
Workload Type : Single SQL Statement
Scope : COMPREHENSIVE
Time Limit(seconds): 60
Completion Status : COMPLETED
Started at : 01/31/2018 15:04:07
Completed at : 01/31/2018 15:04:07

DBMS_SQLTUNE.REPORT_TUNING_TASK(‘TASK_01’)

Schema Name: NJL_TEST
SQL ID : 8ntdmqt9pv0dq
SQL Text : select count(1) from t1


FINDINGS SECTION (1 finding)

1- Statistics Finding

DBMS_SQLTUNE.REPORT_TUNING_TASK(‘TASK_01’)

Table “NJL_TEST”.“T1” was not analyzed.

Recommendation

  • Consider collecting optimizer statistics for this table.
    execute dbms_stats.gather_table_stats(ownname => ‘NJL_TEST’, tabname =>
    ‘T1’, estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt
    => ‘FOR ALL COLUMNS SIZE AUTO’);

Rationale

DBMS_SQLTUNE.REPORT_TUNING_TASK(‘TASK_01’)

The optimizer requires up-to-date statistics for the table in order to
select a good execution plan.

EXPLAIN PLANS SECTION

1- Original

Plan hash value: 3724264953

DBMS_SQLTUNE.REPORT_TUNING_TASK(‘TASK_01’)


| Id | Operation | Name | Rows | Cost (%CPU)| Time |

| 0 | SELECT STATEMENT | | 1 | 7 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS FULL| T1 | 10000 | 7 (0)| 00:00:01 |

执行建议

begin
dbms_stats.gather_table_stats(ownname => ‘NJL_TEST’, tabname =>
‘T1’, estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt
=> ‘FOR ALL COLUMNS SIZE AUTO’);
end;
/

PL/SQL procedure successfully completed.

这里Oracle并没有建议我们创建索引. 我们来尝试创建索引.

(11G)SYS@testdb1> alter table njl_test.t1 add constraints pk1 primary key (id);

Table altered.

11G)SYS@testdb1> set autotrace on
(11G)SYS@testdb1>
(11G)SYS@testdb1> select count(1) from njl_test.t1;

COUNT(1)

 10000

Execution Plan

Plan hash value: 574704543


| Id | Operation | Name | Rows | Cost (%CPU)| Time |

| 0 | SELECT STATEMENT | | 1 | 5 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | INDEX FAST FULL SCAN| PK1 | 10000 | 5 (0)| 00:00:01 |

Statistics

  1  recursive calls0  db block gets24  consistent gets21  physical reads0  redo size
526  bytes sent via SQL*Net to client
523  bytes received via SQL*Net from client2  SQL*Net roundtrips to/from client0  sorts (memory)0  sorts (disk)1  rows processed
  • 我们可以看到, 使用索引可以带来更低的cost, 可见, SQLTA并没有特别只智能, 我们可以根据该SQLTA工具进行SQL优化的建议. 同时还要使用SAA工具进行索引的建议或者根据经验手动调优.

删除调优任务:

SQL> exec DBMS_SQLTUNE.DROP_TUNING_TASK(‘task_01’);

PL/SQL procedure successfully completed.

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

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

相关文章

uniapp-商城-31-shop页面中的 我的订单

前面的章节讲了很多关于页面 布局 的知识。 现在来看看其他栏目,我的订单页面。 1 页面样式图 基本的样式包含shop页面 我的订单 点击我的订单,跳转到订单页面 点击订单的每一条订单,跳转到订单详情 2、创建订单页面 2.1 创建sub页面文件…

深入探讨JavaScript性能瓶颈与优化实战指南

JavaScript作为现代Web开发的核心语言,其性能直接影响用户体验与业务指标。随着2025年前端应用的复杂性持续增加,性能优化已成为开发者必须掌握的核心技能。本文将从性能瓶颈分析、优化策略、工具使用三个维度,结合实战案例,系统梳理JavaScript性能优化的关键路径。 一、Ja…

基于AI与drawio的图表生成技术及其在学术研究中的应用前景分析

一、研究背景与冲突 在当今数字化时代,学术研究与信息传播的方式发生了深刻变革。随着数据量的爆炸式增长以及研究内容的日益复杂,高效、精准地呈现研究成果变得至关重要。图表作为一种直观、简洁且信息承载量大的表达方式,在学术研究中扮演着…

uniapp 仿小红书轮播图效果

通过对小红书的轮播图分析&#xff0c;可得出以下总结&#xff1a; 1.单张图片时容器根据图片像素定高 2.多图时轮播图容器高度以首图为锚点 3.比首图长则固高左右留白 4.比首图短则固宽上下留白 代码如下&#xff1a; <template><view> <!--轮播--><s…

【ORACLE】记录一些ORACLE的merge into语句的BUG

【ORACLE】记录一些ORACLE的merge into语句的BUG 一、自相矛盾-DML重启动行为差异,违反acid原则 发现版本&#xff1a;10g ~ 23ai 这个用例在我之前的文章里有提过&#xff0c;ORACLE和PG系关于并发事务行为有一个非常大的差异&#xff0c;就是ORACLE在某些并发冲突的场景下会…

2025上海车展:光峰科技全球首发“灵境”智能车载光学系统

当AI为光赋予思想&#xff0c;汽车将会变成什么样&#xff1f;深圳光峰科技为您揭晓答案。 2025年4月23日&#xff0c;在刚刚开幕的“2025上海车展”上&#xff0c;全球领先的激光核心器件公司光峰科技举办了主题为“AI光影盛宴&#xff0c;智享未来出行”的媒体发布会&#x…

密码学的hash函数,哈希碰撞, collision resistance, BTC用到的SHA-256简介

密码学中的哈希函数、哈希碰撞、抗碰撞性&#xff08;collision resistance&#xff09;以及比特币中使用的 SHA-256 的简明介绍&#xff1a; &#x1f9e9; 一、哈希函数&#xff08;Hash Function&#xff09; 定义&#xff1a; 哈希函数是一种将任意长度的输入&#xff08;…

unity TEngine学习4

上一篇我们学习了UI部分&#xff0c;这一篇我们学习其他部分&#xff0c;按照老规矩还是先打开官方文档 ResourceModule 在官方文档里介绍了当前加载的设置&#xff0c;但是我们是小白看不懂&#xff0c;那就不管他内部怎么实现的&#xff0c;我们主要看下面的代码给的方法&am…

【AI训练环境搭建】在IDE(Pycharm或VSCode)上使用WSL2+Ubuntu22.04+Conda+Tensorflow+GPU进行机器学习训练

本次实践将在IDE&#xff08;Pycharm或VSCode&#xff09;上使用WSL2Ubuntu22.04TensorflowGPU进行机器学习训练。基本原理是在IDE中拉起WSL2中的Python解释器&#xff0c;并运行Python程序。要运行CondaTensorflowGPU你可能需要进行以下准备工作。 1. 此示例中将使用一个mnis…

【华为OD机试真题E卷】521、 机器人可活动的最大网格点数目 | 机试真题+思路参考+代码解析(E卷复用)(C++)

文章目录 一、题目题目描述输入输出样例1 一、代码与思路&#x1f9e0;C语言思路✅C代码 一、题目 参考链接&#xff1a;https://sars2025.blog.csdn.net/article/details/141748083 题目描述 现有一个机器人口&#xff0c;可放置于MxN的网格中任意位置&#xff0c;每个网格包…

windows端远程控制ubuntu运行脚本程序并转发ubuntu端脚本输出的网页

背景 对于一些只能在ubuntu上运行的脚本&#xff0c;并且这个脚本会在ubuntu上通过网页展示运行结果。我们希望可以使用windows远程操控ubuntu&#xff0c;在windows上查看网页内容。 方法 start cmd.exe /k "sshpass -p passwd ssh namexxx.xxx.xxx.xxx "cd /hom…

Vue3集成浏览器API实时语音识别

效果示例 用法 <!-- 浏览器语音识别 --> <BrowserSpeechRecognitionModal v-if"showModal" :isOpen"showModal" close"showModal false" confirm"handleRecognitionResult" />const showModal ref(false); const input…

k8s 手动续订证书

注意:如果是高可用环境,本文的操作需要在所有控制节点都执行。 查看证书是否过期 kubeadm certs check-expirationkubeadm certs renew可以续订任何特定证书,或者使用子命令all可以续订所有证书: kubeadm certs renew all使用 kubeadm 构建的集群通常会将admin.conf证书复…

每日一道leetcode(补充版)

1679. K 和数对的最大数目 - 力扣&#xff08;LeetCode&#xff09; 题目 给你一个整数数组 nums 和一个整数 k 。 每一步操作中&#xff0c;你需要从数组中选出和为 k 的两个整数&#xff0c;并将它们移出数组。 返回你可以对数组执行的最大操作数。 示例 1&#xff1a; …

基于Keras3.x使用CNN实现简单的猫狗分类

使用CNN实现简单的猫狗分类 完整代码见&#xff1a;基于Keras3.x使用CNN实现简单的猫狗分类&#xff0c;置信度约为&#xff1a;85% 文章目录 概述项目整体目录环境版本注意 环境准备下载miniconda新建虚拟环境基于conda虚拟环境新建Pycharm项目下载分类需要用到的依赖 数据准备…

中介者模式:解耦对象间复杂交互的设计模式

中介者模式&#xff1a;解耦对象间复杂交互的设计模式 一、模式核心&#xff1a;用中介者统一管理对象交互&#xff0c;避免两两直接依赖 当系统中多个对象之间存在复杂的网状交互时&#xff08;如 GUI 界面中按钮、文本框、下拉框的联动&#xff09;&#xff0c;对象间直接调…

豆包桌面版 1.47.4 可做浏览器,免安装绿色版

自己动手升级更新办法&#xff1a; 下载新版本后安装&#xff0c;把 C:\Users\用户名\AppData\Local\Doubao\Application 文件夹的文件&#xff0c;拷贝替换 DoubaoPortable\App\Doubao 文件夹的文件&#xff0c;就升级成功了。 再把安装的豆包彻底卸载就可以。 桌面版比网页版…

Android PackageManagerService(PMS)框架深度解析

目录 一、概念与核心作用 二、技术架构与模块组成 1. 分层架构 1.1 应用层架构细节 1.2 Binder接口层实现 1.3 PMS核心服务层 1.4 底层支持层实现 2. 核心模块技术要点与工作流程 2.1 PackageParser 2.2 Settings 2.3 PermissionManager 2.4 Installer 2.5 ComponentM…

TensorFlow深度学习实战(14)——循环神经网络详解

TensorFlow深度学习实战(14)——循环神经网络详解 0. 前言1. 基本循环神经网络单元1.1 循环神经网络工作原理1.2 时间反向传播1.3 梯度消失和梯度爆炸问题2. RNN 单元变体2.1 长短期记忆2.2 门控循环单元2.3 Peephole LSTM3. RNN 变体3.1 双向 RNN3.2 状态 RNN4. RNN 拓扑结构…

PySide6 GUI 学习笔记——常用类及控件使用方法(常用类矩阵QRectF)

文章目录 类描述构造方法主要方法1. 基础属性2. 边界操作3. 几何运算4. 坐标调整5. 转换方法6. 状态判断 类特点总结1. 浮点精度&#xff1a;2. 坐标系统&#xff1a;3. 有效性判断&#xff1a;4. 几何运算&#xff1a;5. 类型转换&#xff1a;6. 特殊处理&#xff1a; 典型应用…