【问题标题】:Oracle RESULT_CACHE hintOracle RESULT_CACHE 提示
【发布时间】:2021-06-22 13:06:09
【问题描述】:

各位!

我可以从 v$result_cache_objects 中得到期望,当我的查询包含 RESULT_CACHE 提示时,我应该在我的查询的 v$result_cache_objects 的 row_count 列中看到一个非零值?

像这样:

Select /*+ RESULT_CACHE*/ order_id, order_name 
from orders

我想发布

select row_count from v$cache_memory_objects 
  where cache_id = <cache id of my query>

并查看 row_count 的非零值。

环境: 甲骨文 18c XE

参数:

result_cache_mode               MANUAL
result_cache_max_size           8060928
result_cache_max_result         5
result_cache_remote_expiration  0

我认为row_count等于非零非常重要 让我相信 RESULT_CACHE 是有效的。 如果您有其他标准让开发人员相信 RESULT_CACHE 是有效的,请指点我。

提前致谢, 安德鲁。

【问题讨论】:

标签: sql oracle performance caching


【解决方案1】:

首先要检查v$result_cache_objectsSTATUS 必须是Published 才能使用缓存的结果。

ROW_COUNT 大于零,但没那么有趣,简单来说就是缓存结果有 N 行。

更相关的是SCAN_COUNT 列给出了缓存结果的使用次数。

可以在视图v$result_cache_statistics中获得缓存使用情况的总览 提供以下措施(高于其他信息):

Create Count Success
Find Count
Invalidation Count

基本上在使用缓存时,您会尝试看到Find Count(即使用缓存的结果)远高于Create Count Success(即执行查询并缓存结果)

但是...

Oracle 中RESULT_CACHE 的一般问题(这就是为什么它引入得这么晚并且只被边缘使用的原因)是

  • 性能查询即使没有缓存也能正常工作,有时由于缓存的内部开销,缓存需要更多经过的时间才能完成。

  • 非性能查询从缓存中获利,但问题立即出现,为什么应用程序重复发送相同查询...

【讨论】:

  • 谢谢你,Marmite!
  • 好吧,如果您发现答案有用,您也可以投票和/或接受;)@AndrewKlimov 并为我的怀疑观点道歉,但我相信,这与例如在 caches 被认为很重要的地方休眠,在 RDBMS 上它是 bit 的过度杀伤。
猜你喜欢
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多