oracle sql profile实战

第一部分:profile概念

Oracle数据库10g使用了一个叫做SQL配置文件的新方法弥补了存储概要的缺点,

DBA可以使用SQL调整顾问(STA)或SQL访问顾问(SAA)来识别可以得到更好性能的SQL语句,

这些语句可以保存在SQL调整集、一个AWR快照或保存在当前的库缓存中,一旦识别出调整候

选者, 这些顾问程序就开始分析捕获到的语句以期获得更好的性能,然后生成专用的语句扩展(就叫

做SQL配置文件)并重写SQL语句以在执行期间获取更佳的性能。

与存储概要类似,一个SQL配置文件提供了使用更好的执行计划的能力(如果这个执行计

划是可用的),SQL配置文件也可以象存储概要一样分阶段执行,或限制到对特定会话才能执

行该SQL配置文件,但是大多数重要的改进超过了存储概要,

至少有两方面:

(a)自我调整的能力保障了SQL配置文件能提供最好的执行计划

(b)检查SQL配置文件不再有效的能力(因此ADDM建议需要生成一个新的SQL配置文件)

SQL Profile对于一下类型语句有效:

SELECT语句;

UPDATE语句;

INSERT语句(仅当使用SELECT子句时有效);

DELETE语句;

CREATE语句(仅当使用SELECT子句时有效);

MERGE语句(仅当作UPDATE和INSERT操作时有效)。

另外,使用SQL Profile还必须有CREATE ANY SQL PROFILE、DROP ANY SQL PROFILE和ALTER ANY SQL PROFILE等系统权限。

第二部分:profile使用

---1.准备测试环境

create table t1

(

sid number not null ,

sname varchar2(10)

)

tablespace test;

--循环导入数据

declare

   maxrecords constant int:=200000;

   i int :=1;

begin

   for i in 1..maxrecords loop

     insert into t1 values(i,'ocpyang');

   end loop;

dbms_output.put_line(' 成功录入数据! ');

commit;

end;

/

create index index_01 on t1(sid);

exec dbms_stats.gather_table_stats('SCOTT','T1',cascade => true);

---2.执行一个查询

var v varchar2(5);

exec :v :=10;

set autot trace;

select /*+ no_index(t1 index_01) */  * from t1 where sid<=:v;

执行计划

----------------------------------------------------------

Plan hash value: 3617692013

--------------------------------------------------------------------------

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

--------------------------------------------------------------------------

|   0 | SELECT STATEMENT  |      | 10000 |   126K|   139   (3)| 00:00:02 |

|*  1 |  TABLE ACCESS FULL| T1   | 10000 |   126K|   139   (3)| 00:00:02 |

--------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

1 - filter("SID"<=TO_NUMBER(:V))

统计信息

----------------------------------------------------------

     5  recursive calls

     5  db block gets

   513  consistent gets

     0  physical reads

   496  redo size

   723  bytes sent via SQL*Net to client

   519  bytes received via SQL*Net from client

     2  SQL*Net roundtrips to/from client

     0  sorts (memory)

     0  sorts (disk)

    10  rows processed

set autotrace off;

时间: 2024-10-30 09:54:14

oracle sql profile实战的相关文章

Oracle SQL和PL/SQL多表插入技巧

假如一个在线电子商务系统,我们现在需要根据订单表体现的消费金额将客户简单分为大中小三类并分别插入到三张表中. 订单表 order (order_id number, cust_id number, amount number); 小客户表 small_cust (cust_id number, tot_amt number); 中客户表 med_cust (cust_id number, tot_amt number); 大客户表 big_cust (cust_id number, tot_am

SQL PROFILE的用法详解

一般只需要步骤三.四就可以完成执行计划的修改和固定,而outline和baseline则需要N多个步骤. SQL PROFILE使用简单,不区分大小写,回车,空格,但是对DBA写HINT的能力要求比较高,因为SQL PROFILE要求HINT必须写明查询块名, SQL PROFILE还有其他一些牛逼的特性. 我的示例里教了大家偷懒的做法,但是有时间我们还是最好认真把query block的东西学下. 步骤一-------------------------创建测试表,根据DBA_OBJECTS创

1223 result cache,sql profile,sql patch

[20141223]result cache 与sql profile,sql patch.txt --前面blog已经提到result cache的好处与缺点,对于第三方优化,sql profile可以改变稳定执行计划,是否可以通过改变提示来稳定 --执行计划,这样对频繁执行的语句较少逻辑读,提高服务器响应有积极意义. --sql patch 也具有相似的作用,看看这种方式是否可行. SCOTT@test> @ver1 PORT_STRING                    VERSIO

[20131122]跟踪sql profile的操作.txt

[20131122]跟踪sql profile的操作.txt sql profile是11G的新特性,前几天我在给别人做优化时,偷懒直接使用toad,step by step分析使用sql profile,导致系统执行缓慢,不得不中断分析.今天有空跟踪sql profile的操作看看,了解一些过程. SCOTT@test> @verBANNER-----------------------------------------------------------------------------

[20130123]spm与sql profile的主要区别在那里.txt

[20130123]spm与sql profile的主要区别在那里.txt     SPM是11G的新特性,而10g下sql profile一定程度代替store ountlined来稳定执行计划,oracle为什么11G下还要推出SPM?两者区别主要在那里呢? 我举一个例子来说明: 1.建立测试环境: select * from v$version where rownum BANNER -----------------------------------------------------

一个执行计划异常变更的案例 - 外传之SQL Profile(上)

之前的几篇文章: <一个执行计划异常变更的案例 - 前传> <一个执行计划异常变更的案例 - 外传之绑定变量窥探> <一个执行计划异常变更的案例 - 外传之查看绑定变量值的几种方法> <一个执行计划异常变更的案例 - 外传之rolling invalidation> <一个执行计划异常变更的案例 - 外传之聚簇因子(Clustering Factor)> <一个执行计划异常变更的案例 - 外传之查询执行计划的几种方法> <一个执

Oracle SQL语句处理过程

oracle|过程|语句 07年开始,换了一家公司,数据库使用的是ORACLE10G,以前一直使用的是INFORMIX和MSSERVER,感觉ORACLE功能还真强大,比Informi和msserver都好用多啦,体系结构和管理方式都有了许多变化,但使用两个月下来,其实数据库的基本原理是一样的,现结合以前的工作经验和学习的资料,总结ORACLE数据库的一些知识,今天先写Oracle SQL语句处理过程:            一般来说,数据库处理SQL都会经过三个过程:分析.执行.返回结果,比如

Oracle SQL依然无可替代--《Mastering Oracle SQL》

oracle  天寒地冻,呆在家里又读完了<Mastering Oracle SQL>2nd,发现Oracle的功能还是很强悍,光函数就有两百个,HSQL是很难比拟的.接下来的硬骨头,看来要么冒险用Hibernate3.0的SQL Mapping功能,要么就自己跑JDBC组装VO了.       1.报表合计专用的Rollup函数         销售报表  广州     1月      2000元  广州     2月      2500元  广州                 4500元

Oracle SQL*Loader 使用指南(转载)

oracle SQL*Loader是Oracle数据库导入外部数据的一个工具.它和DB2的Load工具相似,但有更多的选择,它支持变化的加载模式,可选的加载及多表加载. 如何使用 SQL*Loader 工具 我们可以用Oracle的sqlldr工具来导入数据.例如: sqlldr scott/tiger control=loader.ctl 控制文件(loader.ctl) 将加载一个外部数据文件(含分隔符). loader.ctl如下: load data infile 'c:\data\my