代码之家  ›  专栏  ›  技术社区  ›  Jon Ericson Homunculus Reticulli

您对Oracle的结果缓存功能有何体验?[关闭]

  •  0
  • Jon Ericson Homunculus Reticulli  · 技术社区  · 17 年前

    我们最近更新了Oracle 11g,我们的DBA建议使用结果缓存来提高一些查询的性能。快速搜索谷歌显示有一些 criticism 该功能及其扩展方式。与任何缓存方案一样,在某些情况下,它会赢得大量时间,而在其他情况下,则会惨遭失败。我们的使用模式(多次向数据库请求几乎不变的相同信息)似乎非常适合结果缓存。

    你对这个功能有过积极或消极的体验吗?

    3 回复  |  直到 17 年前
        1
  •  2
  •   Justin Cave    17 年前

    我会非常警惕任何试图让数据库缓存所有查询结果的事情——这很可能会导致大量额外的工作,为90%的查询维护结果缓存,而这些查询不会受益。Oracle的缓存失效算法非常基本,旨在确保永远不会返回过时的结果,所以对底层表的任何更改都会强制从该表派生的所有结果缓存失效。假设您的大多数查询都是以一定的频率访问更改的表,那么这可能不值得开销。

    你真的只想缓存以下结果 -运行成本很高(否则,缓存结果而不是像Oracle已经做的那样只在缓冲区缓存中缓存数据的边际效益很小。缓存单行主键查找可能永远不值得) -在一段合理的时间内保持不变(确保其他人可以使用缓存) -大多数是静态的引用表(确保在对表执行DML时,不必花费大量时间使缓存结果无效)

        2
  •  1
  •   Jon Ericson Homunculus Reticulli    17 年前

    我们的第一次(也是非常初步的)测试显示了相当大的前景。由于我们正在测试的查询上的缓存命中可以避免全表扫描(约350万行),因此即使是少量命中也很容易使缓存变得有价值。

    到目前为止,我们只做了一个查询,这似乎相当安全。我想将数据库设置为缓存所有结果,但这可能风险更大。

        3
  •  1
  •   A B    13 年前

    在RAC环境中,我总是看到返回值在同一实例上有效, 但是,当将其用于频繁更新表数据的函数时,我们抱怨说,当在与进行更新的实例不同的实例上调用函数时,值会过时。