用DBMS_ADVISOR.SQLACCESS_ADVISOR创建SQL Access Advisor访问优化建议
使用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访问优化建议的更多相关文章
- SQL Tuning 基础概述09 - SQL Access Advisor
Oracle官方文档对SQL Access Advisor的描述如下: SQL Access Advisor, which is a tuning tool that provides advice ...
- Oracle调整顾问(SQL Tuning Advisor 与 SQL Access Advisor
在Oracle数据库出现性能问题时,使用Oracle本身的工具包,给出合理的调优建议是比较省力的做法. tuning advisor 是对输入的sql set的执行计划进行优化accsee advis ...
- SQL Access Advisor in Oracle Database 10g
The SQL Access Advisor makes suggestions about indexes and materialized views which might improve sy ...
- 【转】使用SQL Tuning Advisor STA优化SQL
SQL优化器(SQL Tuning Advisor STA)是Oracle10g中推出的帮助DBA优化工具,它的特点是简单.智能,DBA值需要调用函数就可以给出一个性能很差的语句的优化结果.下面介绍一 ...
- 如何用 SQL Tuning Advisor (STA) 优化SQL语句
在Oracle10g之前,优化SQL是个比较费力的技术活,不停的分析执行计划,加hint,分析统计信息等等.在10g中,Oracle推出了自己的SQL优化辅助工具: SQL优化器(SQL Tuning ...
- 手工执行sql tuning advisor和sql access advisor
sql tuning advisor:创建任务DECLARE my_task_name VARCHAR2(30); my_sqltext CLOB; BEGIN my_sqltext := 'SELE ...
- 使用ORACLE SQL Tuning advisor快速优化低效的SQL语句
ORACLE10G以后版本的SQL Tuning advisor可以从以下四个方面给出优化方案 (1)为统计信息丢失或失效的对象收集统计信息 (2)考虑优化器的任何数据偏差.复杂谓词或失效的统计信 ...
- SQL Access Advisor
1.概述: provides advice on improving the performance of a database through partitioning, materialized ...
- 深入了解SQL Tuning Advisor(转载)
1.前言:一直以来SQL调优都是DBA比较费力的技术活,而且很多DBA如果没有从事过开发的工作,那么调优更是一项头疼的工作,即使是SQL调优很厉害的高手,在SQL调优的过程中也要不停的分析执行计划.加 ...
随机推荐
- 移动跨平台开发框架Ionic开发一个新闻阅读APP
移动跨平台开发框架Ionic开发一个新闻阅读APP 前言 这是一个系列文章,从环境搭建开始讲解,包括网络数据请求,将持续更新到项目完结.实战开发中遇到的各种问题的解决方案,也都将毫无保留的分享给大家. ...
- Linux下面如何运行.sh文件
Linux下面如何运行.sh文件 本文介绍Linux下面用命令如何运行.sh文件的方法,有两种方法: 一.直接./加上文件名.sh,如运行hello.sh为./hello.sh[hello.sh必 ...
- 【POJ】2528 Mayor's posters ——离散化+线段树
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Description The citizens of Bytetown, A ...
- Java面试题之六
三十一.如何取小数点前两位,并四舍五入. package com.lovo; public class TestDot2 { // 方法1 public void test1(double c) { ...
- c#读取xml文件配置文件Winform及WebForm-Demo具体解释
我这里用Winform和WebForm两种为例说明怎样操作xml文档来作为配置文件进行读取操作. 1.新建一个类,命名为"SystemConfig.cs".代码例如以下: < ...
- WebService-06-CXF与Spring集成
前言 自3月份到一家快递公司之后,就极少有时间来写博客了,进去的第一个周末就加班.做公司的开放平台,协助一个小伙伴写WebService接口,用的就是CXF.正好这个东西曾经使用过.如今快7月了,曾经 ...
- 查找——图文翔解Treap(树堆)
之前我们讲到二叉搜索树,从二叉搜索树到2-3树到红黑树到B-树. 二叉搜索树的主要问题就是其结构与数据相关,树的深度可能会非常大,Treap树就是一种解决二叉搜索树可能深度过大的还有一种数据结构. T ...
- 多个Activity之间的切换与数据交互
总结 两个activity之间切换我概括的分为两步: 1. 代码实现切换操作.2.配置中声明另外一个acitivity! 1. 代码实现切换操作 显示定义一个intent 对象,Intent 这个类的 ...
- .NET平台和C#语言
.NET平台的作用C#语言通过.NET平台来编写 部署 运行.NET应用程序. 为什么学习.NET语言1. C#语言是为.NET平台而生的.2. C#语言是完全面向对象的语言,所以一般情况下我们用C# ...
- JavaScript之apply()和call()的区别
我 在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示 例,总算是看的有点眉目了,在这里我做如下笔记,希望和 ...