12
返回列表 发新帖
楼主: jxc_hn

[精华] 怎么可能?同一个程序,pro*c要将近5分钟,而存储过程只要3-4秒?

[复制链接]
论坛徽章:
26
ITPUB元老
日期:2005-02-28 12:57:00生肖徽章:兔
日期:2006-09-26 21:29:55生肖徽章:兔
日期:2006-09-07 17:01:32生肖徽章:兔
日期:2006-09-07 17:02:25生肖徽章:兔
日期:2006-09-07 17:02:46生肖徽章:兔
日期:2006-09-07 17:06:29生肖徽章:兔
日期:2006-09-18 05:26:00生肖徽章:狗
日期:2006-10-06 13:28:27生肖徽章:狗
日期:2006-10-08 05:28:34生肖徽章2007版:鸡
日期:2008-01-02 17:35:53
11#
发表于 2002-12-10 11:57 | 只看该作者
我也想知道
PRO*C在处理批量数据时他可以发挥他的效率

使用道具 举报

回复
论坛徽章:
20
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:58
12#
发表于 2002-12-10 12:07 | 只看该作者
Oracle is CBO is based on statistics to make judgement.  I think up to 60% ~ 80% SQL is working fine, but still have room to improve by human expert.  Have you really test the difference of your SQL with Hints and without Hints.  I found some people always make mistake to test SQL speed.  Use your SQL as an example :
select /*+ use_nl(a b) */ b.subscrbid,acctitmid,sum(fee)
from tab_fee a,tab_subscrb b
where telno=svcnum and part=:lvPart1
group by b.subscrbid,acctitmid;

You force an Nested Loop to the SQL and you may test it in SQL*Plus, as most people will not write a complete testing PL/SQL program to fetch all records from the SQL and not welling to wait thousands of records return from the SQL, So, most of time people may check/feel how soon the SQL will return records and believe this Nested Loop is better performance, but don't you know sometimes the Elapsed Time to fetch all records from a Nested Loop may much slower than a Sort Merge operation.  Sort Merge operation response slow but may run very fast after sorting to catch up with Nested Loop afterward.

使用道具 举报

回复
论坛徽章:
3
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
13#
发表于 2002-12-10 12:20 | 只看该作者
我觉得奇怪
除了“(a.telno,b.svcnum上均有索引)”
你都没说subscrbid and acctitmid and part 等其他是不是有索引?

使用道具 举报

回复
论坛徽章:
4
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34慢羊羊
日期:2015-03-04 14:19:442015年新春福章
日期:2015-03-06 11:57:31
14#
 楼主| 发表于 2002-12-10 13:25 | 只看该作者
你都没说subscrbid and acctitmid and part 等其他是不是有索引?

subscrbid and acctitmid 并没有出现在where 语句中,为什么要建索引?

part虽然也属于tab_fee表,但已经在telno上建了索引,所以影响应该不大。

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
15#
发表于 2002-12-10 15:00 | 只看该作者
建议将程序分段测试,再与存储过程对照,这样更能发现问题。
  尽量使用数组buck操作,或将PREFETCH设为较大的值,这里可设为1000以上,这样可以减少roundtrip.
另外你的proc*c 程序与数据库是运行在同一部机器吗?

使用道具 举报

回复
论坛徽章:
4
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34慢羊羊
日期:2015-03-04 14:19:442015年新春福章
日期:2015-03-06 11:57:31
16#
 楼主| 发表于 2002-12-10 15:35 | 只看该作者
我的这个proc*c程序 和数据库不在同一台机器上。

pro*c 运行时哪些语句会把数据从数据库的那台服务器传到本机来呢? proc*c中的SQL语句应该都是在数据库服务器中的SGA中运行啊。 绑定变量都在share_pool中吧? 实在想不出pro*c运行时网络流量有多大。客户端和服务端传输了什么呢?

使用道具 举报

回复
论坛徽章:
3
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
17#
发表于 2002-12-10 15:46 | 只看该作者
最初由 jxc_hn 发布
[B]还有一个问题,我发现尽管我analyze了相关表,设置了optimize_mode=choose,但oracle 根本不使用所用。看看我的这些语句的explain plan:

1.select acctid into :lvAcctArr from tab_acctrelation a
  where subscrbid=:lvSubscrbID and acctitmid in (:lvAcctItmID,0)
  order by acctitmid desc


还有: (a.telno,b.svcnum上均有索引)
2.select b.subscrbid,acctitmid,sum(fee)
from tab_fee a,tab_subscrb b
where a.telno=b.svcnum and part=:lvPart1
group by  b.subscrbid,acctitmid


[/B]


第一个语句明显where子句中用到了  
subscrbid and acctitmid 并没有出现在where 语句中,为什么要建索引?


千万不要小瞧在 part上作索引(binary or bit map);telno上建不建索引 跟part 无关;你不知道查询计划 是可以先做 part条件检索的?
part虽然也属于tab_fee表,但已经在telno上建了索引,所以影响应该不大

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33ITPUB元老
日期:2007-08-02 17:28:05
18#
发表于 2002-12-18 19:02 | 只看该作者
Pro*c程序中所以fetch到本地变量的sql都是通过网络传输到本地的,我觉得是网络传输和c/s之间的交互的原因,所以当改成数组后速度会快很多,应该是倍数级性能的提高,因为交互次数少了,做这种操作不是proc的强项,为什么不将这个动作写成一个PL/SQL块,pc程序直接将块提交给服务器执行呢?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表