代码之家  ›  专栏  ›  技术社区  ›  Michael Stum

Oracle上动态SQL与存储过程的性能

  •  4
  • Michael Stum  · 技术社区  · 16 年前

    有很多关于SQL Server中缓存的执行计划如何消除存储过程相对于动态SQL的大部分性能优势的信息。但是,对于Oracle数据库是否也是如此,我没有发现太多。是否有人有关于Oracle中动态SQL处理的信息或指针?最好是真实的性能数字,而不是一般的“sp's are good”/“sp's are bad”讨论。

    3 回复  |  直到 16 年前
        1
  •  7
  •   ConcernedOfTunbridgeWells    16 年前

    Oracle还具有缓存的执行功能。如果查询命中哈希表,则该查询将被散列并与计划匹配。您还可以使用此机制强制执行特定查询的计划。与SQL Server一样,您需要使用参数化查询来执行此操作,而不是将值替换为字符串,因为后者将生成不同的哈希值。

        2
  •  3
  •   Gary Myers    16 年前

    Oracle从不需要缓存计划的存储过程,因此没有太多人谈论它。存储过程的主要性能优势是光标缓存。假设,如果一个会话执行过一次PL/SQL,那么该会话很有可能再次运行它。因此,当存储的pl/sql代码告诉会话关闭光标时,通常不会立即关闭光标。相反,它将保持分配状态,直到代码显示“我需要再次打开这个光标”,或者它需要内存。

    它的主要好处是在OLTP处理中,但是实际数量在不同站点之间会有很大的差异。但请看下面的“解析就是解析就是解析”文章: http://www.oracle.com/technology/oramag/oracle/07-jul/o47asktom.html

        3
  •  0
  •   tuinstoel    16 年前

    有一种叫做客户端语句缓存的东西: http://www.oracle.com/technology/oramag/oracle/06-jul/o46odp.html

    请注意,客户端结果缓存和客户端语句缓存是不同的野兽。

    推荐文章