楼主: yulihua49

[PRO*C] 看我做的数据库包装器

[复制链接]
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
451#
 楼主| 发表于 2009-12-2 11:10 | 只看该作者
原帖由 newkid 于 2009-12-1 10:05 发表
那时候也不见你出来宣布获胜?我还一直在等你的结果呢。
现在就有劳你再把环境设出来,我已经全丢了,你要把建表语句、测试基础数据贴出来。
运行存储过程之前用DBMS_STATS.GATHER_TABLE_STATS把表的统计信息收集一下,这样保证生成的SQL执行计划是最佳的。

建表语句和数据都在29页。测试结果在38页379楼。我比你快10%,不是20%,特此更正。
另外在解释一下379楼的测试结果,你的程序CPU开销小是因为开销不在我的进程里,全在引擎(就是数据库服务器)里。我的开销大恰恰就是应用服务器可以分担的开销。

[ 本帖最后由 yulihua49 于 2009-12-2 11:21 编辑 ]

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
452#
发表于 2009-12-2 23:02 | 只看该作者
你测试环境还在吗?把这个view改一下试试:

CREATE OR REPLACE VIEW vw_new_seat
AS
WITH v AS (SELECT v.*, ROWNUM rn FROM vw_seat v)
SELECT v.*
  FROM v LEFT JOIN seat s
       ON (s.start_date  = v.start_date  
           AND s.beg_station = v.beg_station
           AND s.Train_no    = v.Train_no   
           AND s.Carno       = v.Carno      
           AND s.seat_no     = v.seat_no     
           AND s.seat_type   = v.seat_type   
           )
WHERE s.start_date IS NULL
/

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
453#
 楼主| 发表于 2009-12-4 10:52 | 只看该作者
原帖由 newkid 于 2009-12-2 23:02 发表
你测试环境还在吗?把这个view改一下试试:

CREATE OR REPLACE VIEW vw_new_seat
AS
WITH v AS (SELECT v.*, ROWNUM rn FROM vw_seat v)
SELECT v.*
  FROM v LEFT JOIN seat s
       ON (s.start_date  = v.start_date  
           AND s.beg_station = v.beg_station
           AND s.Train_no    = v.Train_no   
           AND s.Carno       = v.Carno      
           AND s.seat_no     = v.seat_no     
           AND s.seat_type   = v.seat_type   
           )
WHERE s.start_date IS NULL
/

原来的还能执行,5秒多,现在的执行不了了:
time ora <exseat.sql
begin
*
ERROR at line 1:
ORA-00001: unique constraint (TICKET.SYS_C0017007) violated
ORA-06512: at "TICKET.MAKE_SEATS", line 23
ORA-06512: at line 2



real    0m1.849s
user    0m0.016s
sys     0m0.008s

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
454#
发表于 2009-12-4 23:55 | 只看该作者
你用的什么参数执行?

这个是我的参数,两秒多生成16416张票:
EXEC make_seats(NULL,0,0,4);

PL/SQL procedure successfully completed.

Elapsed: 00:00:02.64
select count(*) from seat;

  COUNT(*)
----------
     16416

反复执行不会出错:
EXEC make_seats(NULL,0,0,4);

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.40     ------- 第二遍根本不花时间,因为数据都存在了

select count(*) from seat;

  COUNT(*)
----------
     16416

我的seat表原来是空的, 其他表按你29页导入。
你把所有视图、过程再重建一遍,如果还是出错,问题估计在SEAT表。你可以把数据导出,用pm告诉我下载链接。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
455#
 楼主| 发表于 2010-2-9 15:10 | 只看该作者
使用timeval测试纯加载时间:
2 loadsth:20003 02/09 14:54'35 loadfile:rows=7552,upd=0,loss=0,TIMEVAL=1102738微秒
平均6800/秒(包括读文件和写数据库的时间),与sqlldr差不多了。

大概就是1.25秒的总执行时间,扣除打开关闭数据库和初始化DAU的时间。剩1.1秒。

[ 本帖最后由 yulihua49 于 2010-2-9 15:15 编辑 ]

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
456#
发表于 2010-2-9 17:43 | 只看该作者

回复 #464 yulihua49 的帖子

用c挑战一下group by cube

http://www.itpub.net/thread-1267701-1-2.html

使用道具 举报

回复
求职 : 数据库开发
论坛徽章:
29
ITPUB学员
日期:2009-10-14 18:49:45至尊黑钻
日期:2015-12-31 11:11:56数据库板块每日发贴之星
日期:2009-10-22 01:01:02优秀写手
日期:2014-04-30 06:00:17ITPUB8周年纪念徽章
日期:2009-10-09 21:30:10秀才
日期:2017-05-17 11:39:09马上有车
日期:2014-10-09 10:14:53马上有钱
日期:2014-02-18 16:43:09路虎
日期:2013-10-15 15:38:59林肯
日期:2013-09-12 15:57:33
457#
发表于 2010-2-9 18:07 | 只看该作者
..

[ 本帖最后由 风铃中の鬼 于 2010-2-9 19:16 编辑 ]

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
458#
发表于 2010-2-9 22:06 | 只看该作者
原帖由 yulihua49 于 2010-2-9 15:10 发表
使用timeval测试纯加载时间:
2 loadsth:20003 02/09 14:54'35 loadfile:rows=7552,upd=0,loss=0,TIMEVAL=1102738微秒
平均6800/秒(包括读文件和写数据库的时间),与sqlldr差不多了。

大概就是1.25秒的总执行时间,扣除打开关闭数据库和初始化DAU的时间。剩1.1秒。

怎么又把SQL LOADER拿出来比呢?你装载了7552行的什么数据?要不要我再来用外部表写一个试试?
你这个生成票据过程根本不需要外来数据。你是把母版定义读出来,循环生成每张票再插入回去;我的方法是一个INSERT SELECT生成所有的票,数据根本都不需要离开数据库。
现在火车票改实名制,你们公司又赚了吧?

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
459#
发表于 2010-2-9 22:34 | 只看该作者
今年我将第一次被坐动车组软卧铺

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
460#
 楼主| 发表于 2010-2-11 14:53 | 只看该作者
原帖由 〇〇 于 2010-2-9 17:43 发表
用c挑战一下group by cube

http://www.itpub.net/thread-1267701-1-2.html

不懂 cube。不过那几个语句DAU是可以做出来的。

使用道具 举报

回复

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

本版积分规则 发表回复

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