资讯专栏INFORMATION COLUMN

Oracle Function Result Cache

wslongchen / 2798人阅读

摘要:存放与生命周期整合在当前数据源,随着当前数据事物发生而重置。需要额外添加如,不需要当函数重建时,原缓存数据状态置为无效,新的缓存数据会生成。效果甚佳,特此记录。

作用与用法

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

</>复制代码

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

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

存放与生命周期

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

</>复制代码

  1. 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文查看:

</>复制代码

  1. SELECT id
  2. , name
  3. , type
  4. , status
  5. , invalidations
  6. FROM v$result_cache_objects
  7. ORDER BY
  8. id;
监控

</>复制代码

  1. SELECT name, value
  2. FROM v$result_cache_statistics
  3. 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水很深,我们还只是浮游生物。

</>复制代码

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/61887.html

相关文章

  • JavaScript 高级技巧 Memoization

    摘要:来源于拉丁语,不要与混淆了。本文首先介绍一个简单的使用优化技术的例子,然后解读和库中使用的源码,加深理解。总结是一种优化技术,避免一些不必要的重复计算,可以提高计算速度。 memoization 来源于拉丁语 memorandum (to be remembered),不要与 memorization 混淆了。 首先来看一下维基百科的描述: In computing, memoizat...

    刘德刚 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<