您现在的位置:主页 > 技术中心 > 数据库技术 > Oracle

oracle优化------缓存对象与数据(2)

来源:未知 责任编辑:责任编辑 发表时间:2013-12-18 11:37 点击:

而视图v$db_object_cache.kept:告知是否对象常驻shared pool(yes/no),有赖于这个对象是否已经利用PL/SQL 过程

DBMS_SHARED_POOL.KEEP“保持”(永久固定在内存中)

eg:


SQL> Select oc.NAME,oc.TYPE,oc.KEPT from v$db_object_cache oc where oc.TYPE=TABLE AND OC.OWNER=HPO;

NAME                                                                             TYPE                         KEPT
-------------------------------------------------------------------------------- ---------------------------- ----
A_USER                                                                            TABLE                       YES

这个v$db_object_cache视图提供对象在library cache(shared pool)中对象统计,提供比v$librarycache更多的细节,并且常用于找出shared pool中的活动对象。


所以你没有使用过对象时,是不存在这个视图里的,使用时用了,才会在这个视图里出现

可以参看三思的动态性能视图介绍: http://space.itpub.net/7607759/viewspace-22241


例如修改索引的buffer pool


alter index IDX_ORG_TYPE storage(buffer_pool keep) cache;

分区表和分区索引好像不能把每个分区放在不同的buffer pool中,反正我测试通过

2.缓存数据对象的定义,例如package,procedure,pl/sql和sql(也就是cursor)等

上面介绍了把数据尽量缓存在buffer pool中,提高数据在内存的命中率,避免从磁盘读写数据,间接提高系统io能力;
buffer pool缓存的数据是用户最终的目标数据,而把这些用户最终目标数据要传达给用户,就需要oracle用另外一些
动作来完成,而这些动作主要是在share pool中完成的,大概功能有:缓存语句文本,分析代码,执行计划,数据字典
中的表和列的权限定义等;share pool主要也用LRU算法,所以怎样尽量缓存这些数据就是下面要说的

oracle分为sql引擎和pl/sql引擎,分别完成sql和pl/sql的解析等工作,而这里解析又是很耗资源的,所以就要想办法
尽量少解析,使代码重用以提高效率

A。代码的重用

 确定是否需要对语句进行(硬)解析时,是先比较语句的哈希值,下面的两种方法有助于获得相同的哈希值,从而可以实现重用代码,提高命中率:
 
 1)开发组的所有成员都使用相同的编码规范(包括大小写,空格,换行等);

 2)使用绑定变量(提高命中率的同时可能会产生不够好的执行计划,因为优化器不知道变量的确定值,在有栏位的柱状图统计数据时也不能够利用)。

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片

推荐热点

  • Table函数使用简介
  • Oracle数据库Constraint约束的常用操作及异常处理
  • Bulk Collect性能分析(zz)
  • export/import的使用
  • OCP043第十五讲 Database Security
  • ORACLE10gr2数据导入MySQL方案
  • oracle 让sys用户可以使用isqlplus
  • 在oracle数据库下使用iSQL*Plus DBA访问数据库
  • Oracle行列转换小结
?? - ?? - ÝřŝžľŘÝź - TAGąęÇŠ - RSSśŠÔÄ - ??
Copyright © 2004-2024 上海卓卓网络科技有限公司