首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle中的cursor_sharing参数

Oracle中的cursor_sharing参数
EN

Stack Overflow用户
提问于 2013-04-08 15:03:50
回答 2查看 799关注 0票数 0

我想知道在Oracle中将cursor_sharing参数设置为"FORCE“的权衡。因为这将尝试对任何SQL语句进行软解析,因此肯定必须提高性能。但是默认值是"EXACT",所以我想知道将其设置为FORCE或类似值是否有任何危险。

EN

回答 2

Stack Overflow用户

发布于 2013-04-08 16:50:21

除非你真的知道你在做什么,否则我建议你不要改变这个设置。

通常,如果你有大量的硬解析,这是一个糟糕的应用程序设计的迹象。

为给定类别(伪代码)选择所有产品的典型示例:

代码语言:javascript
复制
stmt = 'select * from products where category = ' || my_category
results = stmt.execute

这是有缺陷的,原因有很多:

  • 它为每个类别创建不同的SQL语句,因此增加了dramatically
  • it容易受到SQL注入攻击的硬解析数量

票数 1
EN

Stack Overflow用户

发布于 2013-04-08 17:06:36

一个好的应用程序完全可以在cursor_sharing = exact的情况下运行。一个好的应用程序可以出于特定的原因使用文本,例如select orders with state = new。使用字面量是可以的。如果应用程序使用文字来标识按ID排序,则会有所不同,因为将有许多不同的订单ID。

最好的方法是清理应用程序,以便以正确的方式使用文字,或者开始使用预准备语句以获得最佳性能。

如果您碰巧有一个只使用文字的应用程序,请将cursor_sharing设置为FORCE。在11g中有一些机制,比如基数反馈,能够基于来自查询的非预期行数来调整执行计划,以确保最初计划用于查询的计划在下次使用时基于输入和输出得到修正。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15873135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档