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

准备测试环境(创建两个表并插入数据)
create table big_tab as select rownum as id,a.* from sys.all_objects a ;
create table small_tab as select rownum as id,a.* from sys.all_tables a ;
insert into big_tab select * from big_tab;select count(*) from big_tab;
SQL> select count(*) from big_tab;COUNT(*)
----------2657440
select count(*) from small_tab;
SQL> select count(*) from small_tab;COUNT(*)
----------2584
查询测试,查看最初执行计划
SQL> set timing on
SQL> set autotrace on
SQL> select count(*) from big_tab a,small_tab b where a.object_name=b.table_name;COUNT(*)
----------98112Execution Plan
----------------------------------------------------------
Plan hash value: 2505897097---------------------------------------------------------------------------------
| Id  | Operation           | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |           |     1 |    34 |  8902   (1)| 00:01:47 |
|   1 |  SORT AGGREGATE     |           |     1 |    34 |            |          |
|*  2 |   HASH JOIN         |           |  1439K|    46M|  8902   (1)| 00:01:47 |
|   3 |    TABLE ACCESS FULL| SMALL_TAB |  2464 | 41888 |    24   (0)| 00:00:01 |
|   4 |    TABLE ACCESS FULL| BIG_TAB   |  2653K|    43M|  8872   (1)| 00:01:47 |
---------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------2 - access("A"."OBJECT_NAME"="B"."TABLE_NAME")Note
------ dynamic sampling used for this statement (level=2)Statistics
----------------------------------------------------------139  recursive calls0  db block gets40009  consistent gets40767  physical reads0  redo size528  bytes sent via SQL*Net to client523  bytes received via SQL*Net from client2  SQL*Net roundtrips to/from client4  sorts (memory)0  sorts (disk)1  rows processed
SQL>
创建调优任务CREATE_TUNING_TASK
SQL> set autot off
SQL> set timing off
SQL>DECLARE
my_task_name VARCHAR2(30);
my_sqltext CLOB;
BEGIN
my_sqltext := 'select count(*) from big_tab a,small_tab b where a.object_name=b.table_name';
my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(
sql_text => my_sqltext,
user_name => 'CHAICHENG',
scope => 'COMPREHENSIVE',
time_limit => 180,
task_name => 'tuning_sql_test',
description => 'Task to tune a query on a specified table');
DBMS_SQLTUNE.EXECUTE_TUNING_TASK( task_name => 'tuning_sql_test');
END;
/
执行创建的调优任务
SQL>  exec dbms_sqltune.execute_tuning_task('tuning_sql_test');PL/SQL procedure successfully completed.
查看调优任务
SQL>  SELECT task_name,status FROM USER_ADVISOR_TASKS WHERE task_name='tuning_sql_test';TASK_NAME             STATUS
------------------------------ -----------
tuning_sql_test            COMPLETED
获取调优报告
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('tuning_sql_test') from DUAL;GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
Tuning Task Name   : tuning_sql_test
Tuning Task Owner  : CHAICHENG
Workload Type      : Single SQL Statement
Execution Count    : 2
Current Execution  : EXEC_5930
Execution Type     : TUNE SQL
Scope              : COMPREHENSIVE
Time Limit(seconds): 180
Completion Status  : COMPLETED
Started at         : 12/11/2020 15:11:16
Completed at       : 12/11/2020 15:11:43-------------------------------------------------------------------------------
Schema Name: CHAICHENG
SQL ID     : 30tv0wjwd7ntn
SQL Text   : select count(*) from big_tab a,small_tab b wherea.object_name=b.table_name-------------------------------------------------------------------------------
FINDINGS SECTION (3 findings)
-------------------------------------------------------------------------------1- Statistics Finding
---------------------未分析表格 "CHAICHENG"."SMALL_TAB".Recommendation--------------- 考虑收集此表格的最佳化处理程序统计信息.execute dbms_stats.gather_table_stats(ownname => 'CHAICHENG', tabname =>'SMALL_TAB', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,method_opt => 'FOR ALL COLUMNS SIZE AUTO');Rationale---------最佳化处理需要表格的最新统计信息, 才能选取合适的执行计划.2- Statistics Finding
---------------------未分析表格 "CHAICHENG"."BIG_TAB".Recommendation--------------- 考虑收集此表格的最佳化处理程序统计信息.execute dbms_stats.gather_table_stats(ownname => 'CHAICHENG', tabname =>'BIG_TAB', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,method_opt => 'FOR ALL COLUMNS SIZE AUTO');Rationale---------最佳化处理需要表格的最新统计信息, 才能选取合适的执行计划.3- Index Finding (see explain plans section below)
--------------------------------------------------此叙述语句的执行计划可以藉由建立一个或多个索引来改进.Recommendation (estimated benefit: 98.8%)------------------------------------------ 考虑执行「存取建议程序」来改进实际纲要设计, 或建立建议的索引.create index CHAICHENG.IDX$$_17490001 on CHAICHENG.SMALL_TAB("TABLE_NAME");- 考虑执行「存取建议程序」来改进实际纲要设计, 或建立建议的索引.create index CHAICHENG.IDX$$_17490002 on CHAICHENG.BIG_TAB("OBJECT_NAME");Rationale---------建立建议的索引可大幅改进此叙述语句的执行计划. 然而, 最好是使用代表性的 SQL 工作负载 (相对于单一叙述语句) 来执行「存取建议程序」.这将可获得广泛的索引建议(将索引维护成本和其他空间使用纳入考量).-------------------------------------------------------------------------------
EXPLAIN PLANS SECTION
-------------------------------------------------------------------------------1- Original
-----------
Plan hash value: 2505897097---------------------------------------------------------------------------------
| Id  | Operation           | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |           |     1 |    34 |  8902   (1)| 00:01:47 |
|   1 |  SORT AGGREGATE     |           |     1 |    34 |            |          |
|*  2 |   HASH JOIN         |           |  1439K|    46M|  8902   (1)| 00:01:47 |
|   3 |    TABLE ACCESS FULL| SMALL_TAB |  2464 | 41888 |    24   (0)| 00:00:01 |
|   4 |    TABLE ACCESS FULL| BIG_TAB   |  2653K|    43M|  8872   (1)| 00:01:47 |
---------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------2 - access("A"."OBJECT_NAME"="B"."TABLE_NAME")2- Using New Indices
--------------------
Plan hash value: 4182513400-----------------------------------------------------------------------------------------
| Id  | Operation              | Name           | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |                |     1 |    34 |   106   (6)| 00:00:02 |
|   1 |  SORT AGGREGATE        |                |     1 |    34 |            |          |
|*  2 |   HASH JOIN            |                |  1439K|    46M|   106   (6)| 00:00:02 |
|   3 |    INDEX FAST FULL SCAN| IDX$$_17490001 |  2464 | 41888 |     9   (0)| 00:00:01 |
|   4 |    INDEX FAST FULL SCAN| IDX$$_17490002 |  2653K|    43M|    91   (0)| 00:00:02 |
-----------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------2 - access("A"."OBJECT_NAME"="B"."TABLE_NAME")-------------------------------------------------------------------------------
删除优化任务

通过调用dbms_sqltuen.drop_tuning_task可以删除已经存在的优化任务
SQL>exec dbms_sqltune.drop_tuning_task(‘tuning_sql_test’);
PL/SQL procedure successfully completed.

总结:SQL Tuning Advisor为DBA的调优工作减轻了不少负担,一般情况下我也是通过这种方法进行调优的,这里有点小小的建议:工具毕竟是固定的,一般只会针对单个语句给出建议,不会在整个数据库的整体性能上面去思考该调优方法是否可行,这点必须由DBA把握;DBA还是有必要了解为什么要这么调优,才能更好的根据实际情况给出具体的调优办法,不然调优这种高大上的工作将变得廉价。

ORACLE SQL Tuning Advisor相关推荐

  1. Oracle SQL Tuning Advisor 测试

    如果面对一个需要优化的SQL语句,没有很好的想法,可以先试试Oracle的SQL Tuning Advisor. SQL> select * from v$version;BANNER ---- ...

  2. [原创]ORACLE SQL TUNING ADVISOR 使用方法

    sql tunning advisor 使用的主要步骤: 1 建立tunning task 2 执行task 3 显示tunning 结果 4 根据建议来运行相应的调优方法   下面来按照这个顺序来实 ...

  3. [terry笔记]Oracle SQL 优化之sql tuning advisor (STA)

    https://www.cnblogs.com/kkterry/p/4253265.html 前言:经常可以碰到优化sql的需求,开发人员直接扔过来一个SQL让DBA优化,然后怎么办? 当然,经验丰富 ...

  4. oracle advisor权限,Oracle调整顾问(SQL Tuning Advisor 与 SQL Access Advisor )

    在Oracle数据库出现性能问题时,使用Oracle本身的工具包,给出合理的调优建议是比较省力的做法.将一条或多条SQL语句做为输入内容 在Oracle数据库出现性能问题时,使用Oracle本身的工具 ...

  5. oracle sqladvisor,Oracle 11 sql tuning advisor sql access advisor关闭以及job查看与停止

    Oracle11g自动维护任务 参考博客:http://blog.itpub.net/12798004/viewspace-1247636/ # 自动收集优化器统计信息 收集数据库所有schema没有 ...

  6. oracle权限advisor,Oracle自带工具sql优化集-SQL Tuning Advisor (使用心得体会)

    如何有效的诊断和监控高负载的SQL对于DBA来说并非是件容易的事情,对SQL语句手工调优需要很多的经验和技巧, 结合个人经验常见如下问题: . 对SQL语句本身进行优化以便获得更优的执行计划; . 合 ...

  7. Oracle SQL Access Advisor 说明

    一.说明 1.1 相关内容 在如下官方文档中提到了一些优化工具的说明: Monitoring and Tuning the Database http://docs.oracle.com/cd/E11 ...

  8. SQL Tuning Advisor简单使用

    SQL Tuning Advision是Oracle提供的一个功能包,可以针对有性能问题的SQL给出优化建议.可以作为调优的辅助手段. 建立测试表和索引 create table t_1 as sel ...

  9. SQL Tuning Advisor使用实例

    在oracle10g之前,想要优化一个sql语句是比较麻烦,但是在oracle10g这个版本推出的SQL Tuning Advisor这个工具,能大大减少sql调优的工作量,不过要想使用SQL Tun ...

最新文章

  1. jQuery禁止Ajax请求缓存
  2. 2022年中国全屋智能行业研究白皮书
  3. 使用celery执行Django串行异步任务
  4. ASP 中调用函数关于Call使用注意的问题
  5. tensorflow学习笔记(3)梯度下降法进行曲线拟合和线性回归
  6. Explaining Classifiers using Adversarial Perturbations on the Perceptual Ball论文解读
  7. MATLAB 读取表格 | readmatrix函数
  8. matlab车牌识别源代码资源,车牌识别系统MATLAB源代码完整
  9. 计算机那种专业包括vr,VR技术的大学专业有哪些
  10. ImageJ Merge荧光图片
  11. NetCore EF 使用scaffold-dbcontext导致deps.json] does not exist的解决办法
  12. 解决no-console异常
  13. 安卓手机里的短信删除了如何恢复
  14. asyncio 系列五、asyncio的事件循环
  15. 浅谈京东静态html原理,京东首页前端架构设计.ppt
  16. android 分享文件功能实现
  17. STM32G431控制窗帘电机-窗帘电机拆机
  18. [附源码]Python计算机毕业设计SSM基于Internet快递柜管理系统(程序+LW)
  19. 总结 所有的git错误 持续更新--------
  20. 安盎顺汲称叫蒲惺勤狙陡邮可王大胖,从小就和他这个堂弟要好,听了此事,当然不肯罢休,找上

热门文章

  1. NRF24L01 使用小结—1
  2. 百万调音师—Audition初识
  3. Python 内存回收机制
  4. IE浏览器不能上网其他浏览器可以解决办法
  5. Apache Zookeeper配置
  6. Reactive 反应式编程
  7. 创建自己的ERC20加密货币(可管理、增发、兑换、冻结等高级功能的代币)
  8. Nodejs日志库winston配置
  9. 哈工大关系抽取模型CasRel代码解读
  10. 机器学习之线性回归模型的代价函数是凸函数的证明