【问题标题】:Performance of dynamic SQL vs stored procedures on OracleOracle 上动态 SQL 与存储过程的性能对比
【发布时间】:2010-09-27 05:00:53
【问题描述】:

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

【问题讨论】:

  • 您需要澄清您的术语,因为我们不会将不在存储过程中的每个 SQL 称为“动态 SQL”,并且您可以在存储过程中使用“动态 SQL”。我假设您将动态 SQL 称为客户端 sql?

标签: oracle stored-procedures


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    Oracle 从来不需要用于缓存计划的存储过程,因此没有太多关于它的说明。存储过程的主要性能优势是游标缓存。假设是,如果会话执行了一次 PL/SQL,则会话很有可能再次运行它。因此,当存储的 PL/SQL 代码告诉会话关闭游标时,它通常不会立即关闭它。相反,它会一直分配它,直到代码说“我需要(再次)打开这个游标”或者它需要内存。

    这样做的主要好处在于 OLTP 处理,但实际数字在站点之间会有很大差异。但是请在此处查看“A Parse Is a Parse Is a Parse”文章: http://www.oracle.com/technology/oramag/oracle/07-jul/o47asktom.html

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-15
        • 1970-01-01
        • 2010-09-18
        • 2019-11-04
        • 1970-01-01
        相关资源
        最近更新 更多