Oracle Function Result Cache

作用与用法

在Function中使用数据集缓存能够减少函数内部查询调用次数,从而提高效率,尤其适用于数据变动不频繁(如:组织机构)的数据。属于11g新特性。

CREATE OR REPLACE FUNCTION getOperatorNames (v_empIds varchar)
   RETURN VARCHAR RESULT_CACHE
...

在返回值、类型 后加“RESULT_CACHE”即可。

存放与生命周期

整合在当前数据源,随着当前数据事物发生而重置。(11g release 1需要额外添加“RELIES_ON”【如:result_cache relies_on (tablename)】,11g release 2不需要)

cached results can be directly coupled to their underlying data sources.This means that cached results are invalidated and regenerated when transactions occur against the underlying data.

当函数重建时,原缓存数据状态置为无效,新的缓存数据会生成。(缓存空间通过类似“最近最少使用”算法维护)可通过以下sql文查看:

SELECT id
  ,      name
  ,      type
  ,      status
  ,      invalidations
  FROM   v$result_cache_objects
  ORDER  BY
         id;

监控

SELECT name, value
  FROM   v$result_cache_statistics
  WHERE  name IN ('Create Count Success','Find Count');

'Create Count Success' 可以理解为缓存个数,'Find Count'为命中次数。当然,v$result_cache_statistics中还有其他很多信息,比如缓存大小。

一些特性

执行计划中不统计Function Result Cache;
支持跨回话;
更多细节可以查看:pl/sql function result cache in 11g

说点什么

今天项目一个查询页面加载太慢了,数据量大用户体验差。其中有个根据人员ID查询名称的function就占用了0.3~0.4s,不能忍啊。心想有没类似redis的缓存的做法,通过搜索找到了result cache并应用了。效果甚佳,特此记录。

oracle水很深,我们还只是浮游生物。

更多有意思的内容,欢迎访问rebey.cn


JAVA WEB
java web开发之路

希望加入有意思的开发团队!

190 声望
34 粉丝
0 条评论
推荐阅读
jodconvert的亚子
F项目需要滚动播放视频、文档(Excel/Word...)功能,使用jodconverter将文档转成pdf,结合pdfjs实现。由于个人独立开发,只要结果,故选型自由。后端Spring boot,前端阿里飞冰。可以直接使用jodconverter的starter:

花田土著1阅读 4.3k

Redis缓存高可用集群
在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般。

京东云开发者2阅读 342

封面图
Elasticsearch 段合并(qbit)
前言本文对 Elasticsearch 7.17 适用节点角度查看节点 segment 情况(官方文档) {代码...} 查看节点线程配置(官方文档) {代码...} 配置节点上段合并的线程数(elasticsearch.yml)(官方文档) {代码...} 索引...

qbit1阅读 2.3k

cache2k:Guava Cache及Caffeine之外的新选择
JCache规范不支持null,所以cache2k默认也不支持,不过可以通过permitNullValues(true)来开启,这样子缓存就可以存储null值

codecraft阅读 3.1k

ETag 接口软缓存
Time 由优化前的 3460ms 降低为 193ms,减少 3267ms,减少 94% 耗时(注意,这个是因为作者的下行带宽小,商用带宽不会有这么大的差异)

momo7075770452阅读 664评论 2

封面图
Flask-caching 的缓存与删除 —— 避坑指南
基于 Flask 应用,难免会用到 Flask-cache (或 Flask-cacheing,两者API 基本相同)。它通过装饰器,非常优雅地实现了函数调用的缓存。装饰器可以直接加在 view function ,或者普通 function 上,类似下面的样子:

songofhawk1阅读 1.3k

封面图
通俗易懂的浏览器缓存讲解
写作背景在网络上,介绍信息类,传递资讯类的文章有很多,但真正让读者理解的文章却很少。笔者想做的,是结合自己的理解,将资讯以通俗易懂的方式表达出来。让读者不仅仅了解该项技术,更理解其原理,清楚其流程...

momo7075770451阅读 2.2k

希望加入有意思的开发团队!

190 声望
34 粉丝
宣传栏