网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>数据库技术>>Oracle技术>>Oracle开发>查看文档  
  改变优化参数来适应库缓冲区中sql的变化     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:87次  录入:管理员--2008-03-14  
 

【赛迪网-it技术报道】虽然系统级性能调优不是结构化查询语言(sql)性能调优的最好解决方案,但是,当你不能改变某些sql语句时(例如,提供商提供的某些包中的sql语句),使用sql处理的常规模式来调节系统性能是极其有帮助的。在日常工作经验的基础上,oracle数据库管理员改变某些优化参数来适应库缓冲区中sql类型的变化是很常见的事。

一些较为常见的变更:

1、针对oracle参数的更改。对optimizer_mode,optimizer_index_cost_adj和optimizer_index_caching的改变能对sql执行计划产生巨大影响。  

2、 针对统计参数的更改。使用dbms_stats包导入特定的统计参数(针对当然处理模式作了调整的)可对sql的执行速度产生巨大影响。  

3、 使用自动化查询重新写入。使用oracle实体化视图能够预先聚集、预先汇总数据,从而减少运行时刻表连接的数量。对于更新比较少的数据库,也可以通过预先连接表来提高处理速度。  

一些对性能调优最重要的oracle优化参数如下:

* optimizer_mode(优化模式)-在oracle 9i中,有许多优化模式,都是由参数optimizer_mode的值决定的。这个参数的取值范围是rule, choose, all_rows, first_rows, first_rows_1, first_rows_10 和 first_rows_100.  

我们以定义“最好的”执行计划作为开始点。在任何给定的时间,库缓冲区中的所有sql语句都需要有“最好的”执行计划(当然,由于在任何给定的时间里处理需求可能不同,所以这个最优执行计划可能会经常发生变化)。什么是“最好的”执行计划?是返回结果最快的执行计划还是使用最少计算资源的执行计划?很明显,答案依赖于你的数据库的处理过程,oracle提供了两种优化模式,允许你选择你认为的“最好的”执行计划:  

1、 optimizer_mode=first_rows??相对全表扫描访问,这个优化模式更注重索引访问。当你想要一个查询以最快的速度返回结果行时,即使它的逻辑输入输出总量比全表扫描高,也要使用这个模式在线访问系统一般都使用这个模式,因为终端用户想要尽快地看到第一页查询结果。  

2、optimizer_mode=all_rows??这个优化模式更注重全表扫描(特别是并发全表扫描),因为在这种情况下服务器资源的开销最小。这个模式一般被用于批处理进程和数据仓库中,它们的目标都是使服务器消耗的资源最小化。

3、 optimizer_mode=first_rows_n??从oracle 9i开始,又有一种新的优化模式针对某些返回小结果集的查询进行优化。其取值范围是first_rows_1, first_rows_10 和 first_rows_100,使用这些参数值可以确保oracle能够优化这类sql。  

虽然参数optimizer_mode控制了“基于代价的优化”的总体行为,还有其他oracle参数也会对“基于代价的优化”产生相当大的影响。oracle提供了一些重要的参数来控制“基于代价的优化”做出的选择:  

1、optimizer_index_cost_adj??这个参数可用来调整“基于代价的优化”相对于全表扫描访问而言,更加倾向于索引访问的程度。这个值越小,“基于代价的优化”就越有可能使用一个可用的索引。  

2、 optimizer_index_caching??这个参数告诉oracle你的索引在内存的数据缓冲区中的可能性有多大。对这个参数的设置将会影响到“基于代价的优化” 做出的对一个表连接(嵌套循环)使用索引还是使用全表扫描选择。  

3、 db_file_multiblock_read_count??当把这个值设置得比较大时(使用更大的服务器),“基于代价的优化”识别出分散的(多块)读操作的代价或许比识别顺序读操作的代价更小一些。这就使得“基于代价的优化”更加倾向于全表扫描。  

但是从oracle 9.2版本开始,情况不再是这样了。当计算系统统计表时,它包含了“多块读操作记数”(mbrc),这个数字决定了全表扫描的成本。oracle 10g则更进一步,加入了一些“系统默认值”,这些默认值是非常不合适的。对于oracle 9.2版本而言,请注意metalink上的149560.1。  

1、 parallel_automatic_tuning??当该参数设置为“开启”时,对于含有许多cpu的oracle服务器,全表扫描并发执行。因为并发全表扫描的速度可以非常快,所以“基于代价的优化”对于索引访问开销很大,因此更加倾向于使用全表扫描。  

2、 hash_area_size(假如不使用pga_aggregate_target的话)??这个参数设置“基于代价的优化”相对于使用嵌套循环和排序合并表连接来说,更倾向于使用哈希连接的程度。  

3、sort_area_size(只当不使用参数pga_aggregate_target时)??这个参数影响了“基于代价的优化”做出的执行索引访问还是执行对结果集的排序的决定。这个参数值越高,则在内存中执行排序(比使用临时表空间快上千倍)的可能性就越大,同时“基于代价的优化”相对于使用预先排序好的索引检索,更倾向于使用直接排序。

 
 
上一篇: 在oracle中重新编译所有无效的存储过程    下一篇: 用存储过程实现删除数据表的部分记录
  相关文档
oracle数据库decode()函数的使用方法 04-15
解析:教你快速的掌握em乱码的解决方法 11-15
详细讲解oracle数据库的数据迁移方法 (1) 04-14
oracle数据库索引聚簇与哈希聚簇使用指南 05-05
使用impdp复制oracle的schema数据迁移 05-14
Oracle 9i 的增强型内存使用率查看表 04-11
解析:怎样使用oracle的decode()函数 11-15
实例讲解:sqlplus的set系统变量及其得? size= (1) 01-31
快速了解Oracle9i中的一个特殊等待事件 09-29
带你快速了解oracle数据库提供的恢复机制 05-05
Oracle动态并行处理框架及其优越性 04-12
oracle数据库定时jobs作业的使用方法 08-04
全面解析oracle无法连接本地数据库问题 04-22
与基于锁的方案相比稍显复杂的非阻塞算法 02-22
教你快速掌握如何使用"opatch"打补丁 03-10
Oracle中利用哈希函数提高查询速度 04-11
如何使用备份的控制文件来恢复数据库? 01-31
在设计数据库时如何选择正确的数据类型 05-08
使用Oracle Text构建全文搜索应用程序 05-13
分析Oracle下导出某用户所有表的方法 05-13
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息