关于oracle绑定变量性能的问题。

tsj68 2006-01-13 10:42:44
最近发现公司的应用程序奇慢,环境:oracle9.2.0.1.0+delphi7开发的客户端程序,经查为数据库磁盘和CPU占用较高,分析后sql语句发现并不复杂,也没有大的磁盘访问和CPU运算,在sqlplus环境下运行同样的sql速度很快,但在程序中运行则奇慢。后修改程序,将代码中的sql绑定变量改为实际值,则运行起来非常快,但如果采用绑定编码则速度奇慢。
在oracle的优化原则中明确说明,采用绑定变量可以减少shared_pool的使用,但为什么会对性能产生如此不利的影响呢?
是oracle bug还是delphi 的原因?
请各位大虾不吝赐教!高分奉送!
...全文
296 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
楼主去哪里呢?
liuyi8903 2006-01-18
  • 打赏
  • 举报
回复
其实TOM的expert one on one oracle里面这点讲得很清楚.

就像我上面那样说的.

首先要清楚软硬解析这两上概念.

毕竟软是需要要共享池中寻址的.
yxsalj 2006-01-16
  • 打赏
  • 举报
回复
是不是解析太多了?
select round((b.value/a.value),2)*100||'%' HardParseRatio
from v$sysstat a,v$sysstat b
where a.NAME='parse count (total)'
and b.NAME='parse count (hard)'
MountLion 2006-01-16
  • 打赏
  • 举报
回复
估计你的绑定变量的数据类型有问题。
cenlmmx 2006-01-14
  • 打赏
  • 举报
回复
CBO 需要统计数据选择最佳执行计划。
使用bind var 主要为了减少硬解析次数

1. 9206 以前的cursor_sharing如果是FORECE 确实是有问题的,这里没有考虑例如倾斜度会改变执行计划的问题,可是9i以后多了一个参数similar,按照oracle的说法这个是 safe literal. 不过bug不少,最好用exact
2. cbo在某些情况下,使用绑定变量得到的执行计划没有 直接使用数据得到执行计划好,如你所说,使用绑定变量会缺少一些数据分析。
但是大多数情况,cbo选择的即使不是最优的执行计划,也是很不错的执行计划。而你假如大量不用绑定变量,那就肯定会对系统造成灾难。
lz可以试使用hint
liuyi8903 2006-01-14
  • 打赏
  • 举报
回复
并不一定是绑定变量的总是。

有可能大量的查询条件并不多。

这个时候使用常量会更好一些。

因为var bind会产生很多的soft parse

建议你做个statspack 来看看你的系统的瓶颈到底是怎么产生的。

然后针对性来进行tuning
  • 打赏
  • 举报
回复
如何绑定变量 举你的列之说明下巴
bob_thb 2006-01-13
  • 打赏
  • 举报
回复
会不会是运行时产生的临时表的问题呢?
cenlmmx 2006-01-13
  • 打赏
  • 举报
回复
你的cursor_sharing 设的是exact or similiar?

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧