最佳实践是编写可共享的SQL并使用CURSOR_SHARING 的默认值 EXACT。
但是,对于具有许多类似语句的应用程序,设置
CURSOR_SHARING
为FORCE
有时可以显着改善游标共享。用系统生成的绑定值替换文字可以导致减少的内存使用,更快的解析和减少的锁存器争用。但是,FORCE
这并不意味着它是永久的开发解决方案。作为一般准则,“真实世界表现”小组建议不要在极少数情况下,并且仅在满足以下所有条件时才设置CURSOR_SHARING
为FORCE
例外:
- 共享池中的语句仅在文字值上有所不同。
- 由于大量的库高速缓存未命中,因此响应时间不是最理想的。
- 您现有的代码存在严重的安全性和可伸缩性错误-缺少绑定变量-您需要临时的创可贴,直到可以修复源代码为止。
- 您可以在会话级别而不是实例级别设置此初始化参数。
设置CURSOR_SHARING
为FORCE
有以下缺点:
- 它指示该应用程序不使用用户定义的绑定变量,这意味着它可以进行SQL注入。设置
CURSOR_SHARING
到FORCE
不修复SQL注入漏洞或使任何代码更安全。仅在注入了任何恶意SQL文本之后,数据库才会绑定值。视频:
- 在软解析期间,数据库必须执行额外的工作才能在共享池中找到类似的语句。
- 数据库删除所有文字,这意味着它可以删除有用的信息。例如,数据库在
SUBSTR
和TO_DATE
函数中剥离文字值。使用系统生成的绑定变量(字面量更佳)会对执行计划产生负面影响。 DESCRIBE
在SELECT
语句中包含文字的任何选定表达式的最大长度(由返回)增加。但是,返回的数据的实际长度不会改变。- 不支持星形转换。
也可以看看:
- “ CURSOR_SHARING和绑定变量替换 ”
- Oracle数据库参考,了解
CURSOR_SHARING
初始化参数
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
目录