您的位置:首页 > 数据库 > Oracle

oracle编程入门笔记2015-01-17--一个例子告诉你共享池和数据缓存对效率的影响

2015-01-17 16:44 393 查看
为了证明共享池和数据缓存对效率的影响我来举个例子。

先清空共享池

alter system flush shared_pool;

根据前面的知识,这样之前执行过的sql和执行计划就会被清空,接下来的所有sql都要硬解析了。

清空数据缓存

alter system set events 'immediate trace name flush_cache'

这样,接下来都要从磁盘上读取数据了。



下面从客户表里面取出10000客户为了方便我接下来都在PLSQLDEVELOPER下执行。



耗时15.413s

这是,数据和sql执行计划应该已经存在了,那么我们在清空共享池,让sql硬解析。



按理说数据已经在数据缓存中应该更快啊。为什么还慢了?先不说,待会儿看执行计划

最后一次,直接执行。



看着稍微快了点。但是上面三种情况其实和理论结果是不完全一致的。

接下来看不同情况下的执行计划

打开执行计划,只看统计结果。set autotrace traceonly statistics;

场景一:清空共享池,数据缓存



主要还是CR,不应该啊。但是RC是567

场景2: 再次清空数据缓存不清空共享池



RC完全被消灭,但是还是存在一致性读。



和上面情况基本没有变换。

所以理论上共享池和数据缓存对效率存在影响,实际上影响是存在的,但是不是绝对的。原因如下。

1.执行因为涉及到数据的fetch,而这个过程是通过网络,所以网络质量对时间也是有影响的。

2.清空共享池立竿见影,但是数据缓存,清空只是将那些缓存块标记为空闲。数据依然存在。会不会影响CR就不知道了,希望高人指点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: