有很多关于SQL Server中缓存执行计划如何消除存储过程的大部分性能优势而不是动态sql的信息。但是,我还没有发现Oracle数据库是否也是如此。有没有人有关于Oracle中动态SQL处理信息的信息或指针?最好是真实的性能数字,而不是一般的“sp是好的”/“sp是坏的”讨论。
答案 0 :(得分:7)
Oracle还有一个缓存执行工具。如果查询在哈希表上命中,则查询将被散列并与计划匹配。您还可以使用此机制强制执行特定查询的计划。与SQL Server一样,您需要使用参数化查询来执行此操作,而不是将值替换为字符串 - 因为后者将生成不同的哈希值。
答案 1 :(得分:3)
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
答案 2 :(得分:0)
有一种叫做客户端语句缓存的东西:http://www.oracle.com/technology/oramag/oracle/06-jul/o46odp.html
请注意,客户端结果缓存和客户端语句缓存是不同的野兽。