Oracle优化中的结果集缓存

0    124    2

Tags:

👉 本文共约3735个字,系统预计阅读时间或需15分钟。

简介

结果集缓存(Result Cache)是Oracle 11g的新特性,用于存储经常使用的SQL语句和函数的查询结果。当相同语句再次执行的时候,Oracle就不用再次重复执行(包括扫描索引、回表、计算、逻辑读、物理读等操作),而是直接访问内存得到结果。结果集缓存可以将SQL语句查询的结果缓存在内存(SGA的Shared Pool)中,从而显著地改进需要多次执行和查询相同结果的SQL语句的性能。

结果集缓存的优点是可以重用相同的结果集,减少逻辑I/O,从而提高系统性能。结果集缓存最适合的是静态表(例如只读表),即结果集缓存最适合返回同样结果的查询。

若SQL语句中包含的对象(例如表)做了UPDATE,INSERT,DELETE或是DDL操作,则相关的所有SQL的缓存结果集就自动失效了。所以,Result Cache只对那些在平时几乎没有任何DML操作的只读表比较有用,可以减轻I/O的压力。

对于一些固定性的小的查询结果集或统计性的SQL语句(例如,SQL语句非常复杂,但是最终返回的结果集很简单,只包含少数的几行数据;或者一个非常复杂的SQL,包括好几个大表最后做了一个count操作只返回1行结果)可以使用结果集缓存(Result Cache)。对于一些常用的小表可以使用保留池(Keep Pool)。

在实际情况中,结果集缓存仅在少数的情况下是有效的。在以下情况中,结果集不会被缓存:

① 查询使用非确定性的函数、序列和临时表的结果集不会被缓存。

② 查询违反了读一致性时结果集将不会被缓存。

③ 引用数据字典视图的查询的结果集不会被缓存。

④ 查询结果集大于可用缓存结果集可用空间的不会被缓存。

⑤ 对依赖对象的任何改变(DML、DDL)都会使整个缓存的结果集变为无效,结果集缓存最适合那些只读或接近只读的表。

⑥ ADG的备库不能使用结果集缓存。

SQL语句中通过/*+ result_cache*/提示实现result cache,pl/sql函数通过建函数时的result_cache子句实现。

分类

Oracle数据库引擎提供了3种结果集缓存,包括:服务器查询结果集缓存、PL/SQL函数结果集缓存和客户端结果集缓存。

(一)服务器查询结果集缓存

服务器查询结果集缓存由以下一些参数控制:

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦。
  • 18509239930
  • 个人微信

  • DB宝
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部