关于oracle result cache 结果集缓存的使用说明总结

本文总结了Oracle Result Cache的使用,包括Result Set Caching的概念,强调了服务器端结果集缓存的重要性,并详细阐述了使用限制,如非确定性函数、序列和临时表导致的结果集不被缓存的情况。
摘要由CSDN通过智能技术生成

oracle result cache 结果集缓存的使用说明总结

一、Result Set Caching 说明


1、概述:Oracle 从11g开始引入了结果集缓存(result cache)的新特性,用于存储经常使用的SQL语句和函数的查询结果,将来语句再执行的时候,oracle直接的访问内存得到结果

2、优点:重用相同的结果集,减少逻辑IO,提高系统性能

3、分类:oracle数据库引擎提供了三种结果集缓存,包括:服务器查询结果集缓存、pl/sql函数结果集缓存和客户端结果集缓存

4、应用场合:访问多行返回少数行的语句,非常适合只读、读>>写、典型OLTP等系统的功能;ORACLE建议应用仅仅对read only的表中使用result cache缓存功能

5、影响因素:在SGA中缓存sql语句的执行结果,相同sql再次执行时,直接从SGA直接读结果就可以了,不需要在去数据库中扫描索引,或是回表,计算之类的,
                          若sql中对应的对象(比如表)做了update,insert,delete或是ddl操作,相关所有sql的缓存结果集就自动失效了,重新刷新结果集缓存
                          result cache也有类似enqueue/lock的保护机制,RC enqueue就是拿来保护并发修改的。result cache他依赖是object level的,
                          既不是row level的,也不是block level的。任何DML/DDL(甚至包括grant)都会使基于这个object的result cache变为invalidate。
                          所以result cache只有对那些在平时几乎没有任何DML的只读表比较有用,可以减轻io的压力。
                          在平时读取阶段不是使用的shared pool latch,而是使用的result cache latch

6、使用限制: 

             (1)查询使用非确定性的函数,序列和临时表的结果集不会被缓存

             (2)查询违反了读一致性时结果集将不会被缓存
             (3)引用数据字典视图的查询的结果集不会被缓存
             (4)查询结果集大于可用缓存结果集可用空间的不被缓存;采用LRU算法来管理result cache。

二、服务器端结果集缓存


1、 相关参数说明

影响result cache开启使用的两个参数:result_cache_mode和result_cache_max_size

RESULT_CACHE_MODE 

参数有三个值:AUTO、MANUAL 和FORCE
(1) 设置为AUTO 时,优化程序将根据重复的执行操作确定将哪些结果存储在高速缓存中。
(2) 设置为MANUAL(默认值)时,必须使用RESULT_CACHE (v$sql_hint视图查看hint信息) 提示指定在高速缓存中存储特定结果。
(3) 设置为FORCE 时,所有结果都将存储在高速缓存中。

注:对于AUTO 和FORC
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle数据库中,可以使用缓存机制来加速数据的查询。Oracle缓存机制主要有两种:Buffer CacheResult Cache。 1. Buffer Cache缓存机制 Buffer CacheOracle中最重要的缓存机制之一,用于缓存磁盘上的数据块,加快数据的读取速度。当Oracle需要读取数据时,首先会在Buffer Cache中查找,如果缓存中存在相应的数据块,则直接从缓存中读取数据,避免了从磁盘读取数据的时间开销。 可以通过以下方式使用Buffer Cache缓存机制: - 提高SGA大小:SGA是Oracle中用于缓存数据和控制信息的内存区域。可以通过增加SGA的大小来增加Buffer Cache的大小。 - 选择合适的缓存池类型:Oracle提供了多种类型的缓存池,比如DEFAULT BUFFER CACHE、KEEP BUFFER CACHE、RECYCLE BUFFER CACHE等。可以根据数据的特点和使用情况,选择合适的缓存池类型。 - 提高缓存命中率:缓存命中率指缓存中已经缓存的数据块在总的读取请求中所占的比例。可以通过优化SQL语句、增加SGA大小、选择合适的缓存池类型等方式来提高缓存命中率。 2. Result Cache缓存机制 Result CacheOracle中的另一种缓存机制,用于缓存查询结果,避免重复查询造成的性能损耗。当查询结果被缓存后,下一次查询相同的结果时,Oracle会直接从缓存中返回结果,避免了重复查询的时间开销。 可以通过以下方式使用Result Cache缓存机制: - 使用RESULT_CACHE hint:在SQL语句中使用RESULT_CACHE hint可以指示Oracle使用Result Cache缓存查询结果。 - 设置RESULT_CACHE_MODE参数:RESULT_CACHE_MODE参数用于控制Result Cache的行为,可以将其设置为MANUAL或FORCE,以控制缓存的生成和使用。 - 使用DBMS_RESULT_CACHE包:DBMS_RESULT_CACHE包中提供了多个存储和使用Result Cache的过程和函数,可以根据需要来使用。 需要注意的是,缓存机制可以加速数据的查询,但也会消耗一定的内存资源。在使用缓存机制时,需要权衡内存资源和查询性能,以达到最优的性能和资源利用率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值