Oracle数据库11g:SQL计划管理(三)
2008-09-04 12:50:18 来源:WEB开发网为了说明这个概念,我创建了一个简单的SQL语句(SPM_3_1.SQL)查询在销售历史(SH)方案中的几个表,要创建一个干净的状态SPM会评估这个查询,无论如何,我首先将从标记有注释字符串SPM_的SMB、库缓存和数据库缓存中清除SQL计划基线,如列表3.6显示的那样。一旦清除完成,我将在会话层使用列表3.7中的代码设置初始化参数OPTIMIZER_CAPTURE_SQL_PLAN_BASELINE的值为FALSE将自动捕获SQL计划基线设置为非激活状态,执行查询,然后使用函数DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE手动从库缓存中捕获SQL计划基线的结果。
绑定值监视及适应性游标共享
我在SQL语句SPM_3_1.sql中故意使用了绑定变量以说明SQL计划管理如何与绑定变量交互,基本成本的优化器从Oracle9.0.1以来就已经可以利用这个特色了,它让CBO基于提供给绑定变量的第一套值判断出一个更准确的执行计划。
Oracle11g也引入了一个叫做适应性游标共享的新特性,它能非常高效地与绑定变量和共享游标进行交互,SPM会通过标记每捕获的第一个执行计划作为对应的SQL计划基线解决这两个特性之间的所有冲突,如果我重新执行了相同的查询但为绑定变量使用了不同的值,它相对原始计划性能可能更低了,要预防这个问题,SPM将存储这个执行计划作为SMB中SQL语句计划历史的一部分,但是新的计划不会被使用除非SPM校验了它,并认为它效率更高。(我会在以后的文章中专门讲述这一方面的内容,并讲述适应性游标共享如何工作)
请求SQL计划基线演变
换句话说,当SPM检测到一个性能更好的计划会发生什么?我将在SH.CUSTOMERS表中的CUST_LAST_NAME列上添加一个索引来模拟这个情景,这个索引对于SQL语句SPM_3_1.sql的性能将起到立竿见影的影响,因为不再会在SH.CUSTOMERS上请求一个全表扫描了。一旦我在会话层将初始化参数OPTIMIZER_CAPTURE_SQL_PLAN_BASELINE的值设置为默认值(TRUE)以重新激活自动捕获SQL计划基线的话,我将再次执行该SQL语句并校验捕获的SQL计划基线的结果,CBO将收集一个新的会使用到该新索引的执行计划,来提升语句的性能,新的执行计划也将记录到SMB中(查看列表3.8)
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
更多精彩
赞助商链接