Oracle 表缓存(caching table)的使用

2014-11-24 18:00:14 · 作者: · 浏览: 0

--************************************


--************************************



1.使用caching table 的原因


在通常的情况下,应用程序访问在cache中的数据块将按照LRU算法来进行处理。然而对于小表的访问,当使用全表扫描时,则该表


中的块会放置LRU列表最近最少使用尾部的(LRU),因此很快就被淘汰出局。然而使用基于成本优化的方法,对于小表进行查询以及收


集统计信息,大多情形下走的是全表扫描,因此势必造成一种情形,即该表后续需要再次访问,而每次使用了全表扫描,而该对象很快


被淘汰出局,因此需要再次读入到buffer cache,耗用了大量的I/O



2.解决该问题的方法


设计表为caching table ,即使对该表使用全表访问时,则该表对象的块仍然被放置在LRU列表最近最多使用的尾部(MRU)


不要过度的使用caching table,以免造成性能下降


通常将caching table 存放在keep buffer pool,缺省的情况下会放置在default buffer pool



3.具有cache属性与pin 的差异


对于具有cache属性的对象,并不是将该对象pincache里,而是尽可能的延迟该对象驻留cache的时间


而对于pin对象,则是将该对象常驻到内存



4.设计cache table 的方法


创建表对象时,使用cache子句


修改表对象时,使用cache子句


使用cache 提示



创建表对象时使用cache,如下面的例子



使用alter table 修改已经存在的表


alter table scott.emp cache;



可以使用nocache来修改对象,使其不具备cache属性


alter table soctt.emp nocache



使用hint提示符来实现cache


select /*+ cache*/ empno,ename from scott.emp;