暂无图片
暂无图片
7
暂无图片
暂无图片
暂无图片

ORACLE的result_cache初探

2711

今天在给客户数据库做检查的时候发现了一些TOP SQL,其执行的消耗如下所示:



10天内,执行了2526万多次,在我取快照的5个小时内,执行了200多万次,CPU的消耗就占用了执行时间的95%,有没有什么办法还能够提速呢,因为是个40多条数据的小表,走索引也不见得会提升多少。那么有没有别的办法能够提速呢。


这个时候经同事提点,想到了result_cache。想要用的爽6好,那么首先我们得搞清楚result_cache的概念。

result cache 在SGA中或者是客户端应用内存中占用的一块区域,它存储着数据库查询或者查询块的结果以供重复使用。缓存的行在SQL语句与session之间是共享的,除非是缓存失效。

有两种类型的结果缓存:1、服务器结果缓存。2、客户端结果缓存。

服务器结果缓存:它属于SGA中的shared pool共享池,在这里面存放的是SQL查询结果与PLSQL函数返回的结果。

使用服务器结果缓存的优势:OLAP应用程序从中受益颇高,访问大量的行但是返回了少量的结果就非常适合结果缓存,像数据仓库。例如,查询重写等价与创建了一个物化视图来存放查询结果缓存,代替了表。

工作原理:

当你执行一个查询的时候,数据库会在内存中查找是否已经存在了结果缓存中。如果存在,则数据库代替查询直接从内存返回结果。如果不存在,则数据库执行查询,返回输出结果,并将结果存储至结果缓存中。

当用户重复执行查询或函数时候,数据库将会从缓存中检索行,减少响应时间。当该依赖的对象被修改的话,缓存的结果将会无效

下面我将用例子进行对比,对照组为:第一次执行,重复执行,加hint执行,加hint重复执行


逻辑读:5740,物理读:5731


逻辑读:5740


加了hint第一次执行,逻辑读:5740


加了hint重复执行

最终发现,结果集缓存生效的时候,查询直接返回结果,连逻辑读都没了。这将大幅度提升重复执行的SQL的效率。当然



我针对表temp进行了一个更新操作,来看看结果缓存是否还有效。结果发现,表temp发生了修改结果缓存就失效了,查询的时候又进行了一次结果缓存操作。


查看视图V$RESULT_CACHE_OBJECTS

SELECT id, type, creation_timestamp, block_count,
column_count, pin_count, row_count
FROM V$RESULT_CACHE_OBJECTS
WHERE cache_id = '6f5h95tbubjc49ntyvtmcwu707';


在视图中如果使用呢,比如用一个常见的with as语句进行实验。


然后用常用的view实验


客户端结果缓存

通过应用程序OCI接口,将SQL查询的结果缓存放在了客户端进程使用的内存中。该客户端结果缓存存在于每个进程,并且进程内的所有session共享。ORACLE官方建议客户端结果缓存针对于那些只读或者以读为主的表使用。

使用客户端结果缓存的优势

OCI驱动程序,像OCCI、JDBC OCI驱动程序和ODP.NET,支持客户端结果缓存。使用客户端结果缓存的性能优势包括:

1、减少查询响应时间

当重复执行查询时,应用程序会直接从客户端缓存中检索结果,从而加快查询响应时间。

2、更有效的利用数据库资源。

减少服务器往返可能会大大节省服务器资源(如服务器CPU和I/O)的性能。节省出来的资源可以给其他的任务,从而使服务器更具扩展性。

3、降低内存花费

The result cache uses client memory, which may be less expensive than server memory

这个结果缓存使用的是客户端内存,多半比服务器内存便宜。

工作原理:

客户端结果缓存存储最外层查询的结果,即OCI应用程序定义的列。子查询和查询块不会被缓存。

如下图,展示了一个带有数据库登录会话的客户端进程。此客户端进程在客户端进程中运行的多个应用程序会话之间共享一个客户端结果缓存。如果第一个应用程序会话运行查询,那么它会从数据库中检索行,并将它们缓存在客户机结果缓存中。如果其他应用程序会话运行相同的查询,那么它们也会从客户端结果缓存中检索行。

Description of Figure 15-1 followsDescription of Figure 15-1 follows

客户端结果缓存透明地使结果集与影响它的会话状态或数据库更改保持一致。当事务更改用于构建缓存结果的数据库对象的数据或元数据时,数据库会在下一次到服务器的往返过程中向OCI客户端发送一个结果缓存失效。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
2人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论