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 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相关推荐
- Oracle SQL Tuning Advisor 测试
如果面对一个需要优化的SQL语句,没有很好的想法,可以先试试Oracle的SQL Tuning Advisor. SQL> select * from v$version;BANNER ---- ...
- [原创]ORACLE SQL TUNING ADVISOR 使用方法
sql tunning advisor 使用的主要步骤: 1 建立tunning task 2 执行task 3 显示tunning 结果 4 根据建议来运行相应的调优方法 下面来按照这个顺序来实 ...
- [terry笔记]Oracle SQL 优化之sql tuning advisor (STA)
https://www.cnblogs.com/kkterry/p/4253265.html 前言:经常可以碰到优化sql的需求,开发人员直接扔过来一个SQL让DBA优化,然后怎么办? 当然,经验丰富 ...
- oracle advisor权限,Oracle调整顾问(SQL Tuning Advisor 与 SQL Access Advisor )
在Oracle数据库出现性能问题时,使用Oracle本身的工具包,给出合理的调优建议是比较省力的做法.将一条或多条SQL语句做为输入内容 在Oracle数据库出现性能问题时,使用Oracle本身的工具 ...
- oracle sqladvisor,Oracle 11 sql tuning advisor sql access advisor关闭以及job查看与停止
Oracle11g自动维护任务 参考博客:http://blog.itpub.net/12798004/viewspace-1247636/ # 自动收集优化器统计信息 收集数据库所有schema没有 ...
- oracle权限advisor,Oracle自带工具sql优化集-SQL Tuning Advisor (使用心得体会)
如何有效的诊断和监控高负载的SQL对于DBA来说并非是件容易的事情,对SQL语句手工调优需要很多的经验和技巧, 结合个人经验常见如下问题: . 对SQL语句本身进行优化以便获得更优的执行计划; . 合 ...
- Oracle SQL Access Advisor 说明
一.说明 1.1 相关内容 在如下官方文档中提到了一些优化工具的说明: Monitoring and Tuning the Database http://docs.oracle.com/cd/E11 ...
- SQL Tuning Advisor简单使用
SQL Tuning Advision是Oracle提供的一个功能包,可以针对有性能问题的SQL给出优化建议.可以作为调优的辅助手段. 建立测试表和索引 create table t_1 as sel ...
- SQL Tuning Advisor使用实例
在oracle10g之前,想要优化一个sql语句是比较麻烦,但是在oracle10g这个版本推出的SQL Tuning Advisor这个工具,能大大减少sql调优的工作量,不过要想使用SQL Tun ...
最新文章
- jQuery禁止Ajax请求缓存
- 2022年中国全屋智能行业研究白皮书
- 使用celery执行Django串行异步任务
- ASP 中调用函数关于Call使用注意的问题
- tensorflow学习笔记(3)梯度下降法进行曲线拟合和线性回归
- Explaining Classifiers using Adversarial Perturbations on the Perceptual Ball论文解读
- MATLAB 读取表格 | readmatrix函数
- matlab车牌识别源代码资源,车牌识别系统MATLAB源代码完整
- 计算机那种专业包括vr,VR技术的大学专业有哪些
- ImageJ Merge荧光图片
- NetCore EF 使用scaffold-dbcontext导致deps.json] does not exist的解决办法
- 解决no-console异常
- 安卓手机里的短信删除了如何恢复
- asyncio 系列五、asyncio的事件循环
- 浅谈京东静态html原理,京东首页前端架构设计.ppt
- android 分享文件功能实现
- STM32G431控制窗帘电机-窗帘电机拆机
- [附源码]Python计算机毕业设计SSM基于Internet快递柜管理系统(程序+LW)
- 总结 所有的git错误 持续更新--------
- 安盎顺汲称叫蒲惺勤狙陡邮可王大胖,从小就和他这个堂弟要好,听了此事,当然不肯罢休,找上