使用OEM方式来创建SQL Access Advisor访问优化建议,已经是四五年的事了,下面就来写写怎样使用DBMS_ADVISOR.SQLACCESS_ADVISOR来创建SQL Access Advisor访问优化建议吧。

1、SQL Access Advisor从三个方面提供优化建议

1.1、索引优化建议

SQL Access Advisor可以建议通过创建bitmap,function-based,B-tree 三种类型索引的改进SQL执行性能。

1.2、物化视图优化建议

SQL Access Advisor可以建议通过创建fast refreshable和fullrefreshable刷新方式的物化视图的方式改进SQL执行性能。

1.3、分区优化建议

SQL Access Advisor可以建议在非分区表上使用分区来提高性能。此外可能建议在表上(分区和非分区表)创建新的索引和物化视图的方式改进SQL执行性能。

2、SQL Access Advisor的依赖信息

SQL Access Advisor依赖于表的统计信息。

本文作者“踩点”做过反复测试,在下文中用到的litest.litest_8表的统计信息删除后,偿试生成优化建议,SQL AccessAdvisor是不会生成优化建议的;重新对litest.litest_8表收集统计信息,SQL Access Advisor即可生成优化建议。

3、创建SQL Access Advisor优化任务及获取建议内容(两种方式任选一种)

3.1 创建优化任务,方式一:

DECLARE

task_name VARCHAR2(200);

BEGIN

task_name := 'LI_TASK_9';

DBMS_ADVISOR.QUICK_TUNE(DBMS_ADVISOR.SQLACCESS_ADVISOR, task_name,

'select * from litest.litest_8 where created>sysdate-50 and created<sysdate-30 and object_id=79420');

END;

/

3.1 创建优化任务,方式二(方式二比方式一更简单直接):

SQL> execute DBMS_ADVISOR.QUICK_TUNE(DBMS_ADVISOR.SQLACCESS_ADVISOR,'LI_TASK_9','select * from litest.litest_8 where created>sysdate-50 and created<sysdate-30 and object_id=79420');

两种方式都要注意以下两点:

(1)、如果SQL文本中本身带有单引号(')的,需要替换成双引号('’);

(2)、不支持SQL语句中含有SYS和SYSTEM用户下的表对象

3.2 查看上面优化任务创建是否成功以及其基本情况

SQL>select a.owner,a.task_id,a.task_name,execution_start,a.status_message,b.commandfromdba_advisor_log a,dba_advisor_actions bwhere a.task_id=b.task_idand b.task_name='LI_TASK_9'

owner

task_id

task_name

execution_start

status_message

command

SYS

852

LI_TASK_9

2013/9/24 23:55

访问指导执行完毕

CREATE INDEX

如果表上缺少统计信息或SQL Access Adviso认为无优化建议,将不会生成TASK

3.3 查看使用优化建议前后的资源成本对比信息

,'低') 重要性 FROM dba_advisor_sqla_wk_stmts WHERE task_name='LI_TASK_9';

sql_id

优化前cost

优化后cost

cost提升倍数

重要性

5rr7tx64r1pcs

14165

5

2833

3.4 查看建议方案全部内容

3.4.1 创建一个directory目录存放生成的建议方案内容文件(如果已存有可用directory,此步可跳过)

SQL> create directory EXPDP_DIR as '/dba/soft'

3.4.2 生成建议方案内容文件

SQL> exec DBMS_ADVISOR.CREATE_FILE(DBMS_ADVISOR.GET_TASK_SCRIPT('LI_TASK_9'),'EXPDP_DIR', 'LI_TASK_9.sql');

3.4.3 查看建议方案文件内容

$cd /dba/soft

$vi LI_TASK_9.sql

Rem  SQL Access Advisor: Version 11.2.0.3.0 - Production

Rem

Rem  Username:        SYS

Rem  Task:            LI_TASK_9

Rem  Execution date:

Rem

CREATE INDEX "LITEST"."LITEST_8_IDX$$_03660000"

ON "LITEST"."LITEST_8"

("OBJECT_ID","CREATED")

COMPUTE STATISTICS;

  上面的SQL Access Advisor 给出了明确的创建索引的语句,建议在LIST_8表上创建OBJECT_ID+ CREATED字段的联合索引

4、删除SQL Access Advisor优化任务

SQL> exec DBMS_ADVISOR.DELETE_TASK('LI_TASK_9');

本文由“踩点”所作,转发请说明出处。谢谢!

用DBMS_ADVISOR.SQLACCESS_ADVISOR创建SQL Access Advisor访问优化建议的更多相关文章

  1. SQL Tuning 基础概述09 - SQL Access Advisor

    Oracle官方文档对SQL Access Advisor的描述如下: SQL Access Advisor, which is a tuning tool that provides advice ...

  2. Oracle调整顾问(SQL Tuning Advisor 与 SQL Access Advisor

    在Oracle数据库出现性能问题时,使用Oracle本身的工具包,给出合理的调优建议是比较省力的做法. tuning advisor 是对输入的sql set的执行计划进行优化accsee advis ...

  3. SQL Access Advisor in Oracle Database 10g

    The SQL Access Advisor makes suggestions about indexes and materialized views which might improve sy ...

  4. 【转】使用SQL Tuning Advisor STA优化SQL

    SQL优化器(SQL Tuning Advisor STA)是Oracle10g中推出的帮助DBA优化工具,它的特点是简单.智能,DBA值需要调用函数就可以给出一个性能很差的语句的优化结果.下面介绍一 ...

  5. 如何用 SQL Tuning Advisor (STA) 优化SQL语句

    在Oracle10g之前,优化SQL是个比较费力的技术活,不停的分析执行计划,加hint,分析统计信息等等.在10g中,Oracle推出了自己的SQL优化辅助工具: SQL优化器(SQL Tuning ...

  6. 手工执行sql tuning advisor和sql access advisor

    sql tuning advisor:创建任务DECLARE my_task_name VARCHAR2(30); my_sqltext CLOB; BEGIN my_sqltext := 'SELE ...

  7. 使用ORACLE SQL Tuning advisor快速优化低效的SQL语句

    ORACLE10G以后版本的SQL Tuning advisor可以从以下四个方面给出优化方案 (1)为统计信息丢失或失效的对象收集统计信息   (2)考虑优化器的任何数据偏差.复杂谓词或失效的统计信 ...

  8. SQL Access Advisor

    1.概述: provides advice on improving the performance of a database through partitioning, materialized ...

  9. 深入了解SQL Tuning Advisor(转载)

    1.前言:一直以来SQL调优都是DBA比较费力的技术活,而且很多DBA如果没有从事过开发的工作,那么调优更是一项头疼的工作,即使是SQL调优很厉害的高手,在SQL调优的过程中也要不停的分析执行计划.加 ...

随机推荐

  1. virtualbox 虚拟机网络设置

    1.宿主机网卡设置 virtualbox 第一块网卡设置 virtualbox第二块网卡设置 2.虚拟机网络设置 找到以上设置中MAC地址对应的那个网卡: 配置网络: 重启网络,ok.

  2. OSG中的几何体

    osg::Shape类 继承自osg::Object类: osg::Shape类是各种内嵌几何体的基类,不但可以用于剔除和碰撞检测,还可用于生成预定义的几何体对象: 常见的内嵌几何体包括: osg:: ...

  3. ViewPager实现页卡的最新方法--简洁的TabLayout(谷歌支持包)

    效果图: 添加依赖包: compile ‘com.android.support:design:‘ 布局文件: <?xml version="1.0" encoding=&q ...

  4. shell脚本中常见的一些特殊符号和作用详解

    这篇文章主要介绍了shell脚本中常见的一些特殊符号和它的作用详解,总结的很简洁,容易看懂,需要的朋友可以参考下   在编写Shell脚本时,我们需要会用到各种各样的特殊符号,通过这些特殊符号可以使我 ...

  5. Java用Dijkstra算法实现地图两点的最短路径查询(Android版)

    地图上实现最短路径的查询,据我了解的,一般用Dijkstra算法和A*算法来实现.由于这是一个课程项目,时间比较急,而且自己不熟悉A*算法,所以参考网上的Dijkstra算法(http://blog. ...

  6. ldap for ruby

    Net::LDAP for Ruby (also called net-ldap) implements client access for the Lightweight Directory Acc ...

  7. _sortBy用法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. Redis数据结构及相应的命令

    Redis可以存储键(key)与5种不同类型值(value)之间的映射,5中不同类型的值分别为字符串(string),列表(list),散列(hash),集合(set)和有序集合(sorted set ...

  9. 多个Activity之间的切换与数据交互

    总结 两个activity之间切换我概括的分为两步: 1. 代码实现切换操作.2.配置中声明另外一个acitivity! 1. 代码实现切换操作 显示定义一个intent 对象,Intent 这个类的 ...

  10. 安卓activity捕获返回button关闭应用的方法

    安卓activity捕获返回button关闭应用的方法 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //按下键盘 ...