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

DM8-结果集缓存

小梨子 2024-08-16
458

DM8-结果集缓存

结果集缓存说明

有时执行一个查询获得结果集是一个非常消耗资源的操作。若存在可用结果集,能马上返回结果,响应速度可以大大提升。

结果集重用是基于计划重用的,如果查询的计划不能缓存,则其查询结果集必然不能缓存。

应用场景

对于执行计划无法优化,需要大量计算,但是相关数据变动少的情况,可以考虑打开结果集缓存来提升性能。

典型场景:

1.大表前后LIKE

2.大表大结果集HASH JOIN

3.复杂的分析函数

相关参数

  1. USE_PLN_POOL:确认该参数是否开启,当置为非 0 时,会启用计划重用。
  2. RS_CAN_CACHE:是否开启结果集缓存(1自动,2手动)
  3. RS_CACHE_TABLES:配置需要缓存结果集的表,如果是连接查询,涉及到的表都在配置中时才可以缓存结果集
  4. RS_CACHE_MIN_TIME:超过该配置执行时间的SQL才会被缓存
  5. 手工HINT /*+RESULT_CACHE*/,如果配置了该HINT,是否缓存只受RS_CAN_CACHE和限制影响
  6. 手工HINT /*+NO_RESULT_CACHE*/,指定特定SQL不缓存结果集

相关视图

V$CACHEPLN、V$SQL_PLAN

实操

修改参数

RS_CAN_CACHE = 2

RS_CACHE_TABLES = 'SYSDBA.EMP1'

查询

SELECT * FROM SYSDBA.EMP1;

select /*+RESULT_CACHE*/ * FROM EMP1;

select /*+RESULT_CACHE*/ * FROM TEST1;

select * from v$cachepln;

可以看出使用HINT,缓存了相关的结果集。

总结

  1. 'USE_PLN_POOL'静态参数,需要重启生效
  2. 'RS_CAN_CACHE'静态参数,需要重启生效
  3. 'RS_CACHE_TABLES'手工参数,需要重启生效
  4. 'RS_CACHE_MIN_TIME',动态参数
  5. RS_CACHE_TABLES设置后,并不会立刻对该表结果集缓存,还是需要手工HINT去缓存
  6. 特殊情况下,可以考虑开启结果集缓存对难以优化的语句进行结果集缓存
  7. 一般不建议生产环境上开启结果集缓存,如果需要开启一定要谨慎评估


https://eco.dameng.com/

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

评论