我想知道在Oracle中将cursor_sharing参数设置为"FORCE“的权衡。因为这将尝试对任何SQL语句进行软解析,因此肯定必须提高性能。但是默认值是"EXACT",所以我想知道将其设置为FORCE或类似值是否有任何危险。
发布于 2013-04-08 16:50:21
除非你真的知道你在做什么,否则我建议你不要改变这个设置。
通常,如果你有大量的硬解析,这是一个糟糕的应用程序设计的迹象。
为给定类别(伪代码)选择所有产品的典型示例:
stmt = 'select * from products where category = ' || my_category
results = stmt.execute这是有缺陷的,原因有很多:
。
发布于 2013-04-08 17:06:36
一个好的应用程序完全可以在cursor_sharing = exact的情况下运行。一个好的应用程序可以出于特定的原因使用文本,例如select orders with state = new。使用字面量是可以的。如果应用程序使用文字来标识按ID排序,则会有所不同,因为将有许多不同的订单ID。
最好的方法是清理应用程序,以便以正确的方式使用文字,或者开始使用预准备语句以获得最佳性能。
如果您碰巧有一个只使用文字的应用程序,请将cursor_sharing设置为FORCE。在11g中有一些机制,比如基数反馈,能够基于来自查询的非预期行数来调整执行计划,以确保最初计划用于查询的计划在下次使用时基于输入和输出得到修正。
https://stackoverflow.com/questions/15873135
复制相似问题