免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5389 | 回复: 14
打印 上一主题 下一主题

写了一个删除数据的存储过程,执行起来比较慢,请指教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-02-17 09:31 |只看该作者 |倒序浏览
因为是带日志删除,所以怕日志满了要分批删除

方法1、先建立游标
DECLARE  CursorStmt Cursor for select id from 表 where {条件}
         然后循环
      fetch id  into ....
         delete  表 where id = ...
        每5000 条commit 一次。

方法2、 先找出前5000条的时间范围
        select max(operattime),min(operattime) from 表 where {条件} order by operattime fetch first 5000 rows only
             再根据时间范围删除
         delete from 表 where operattime between ... and ...

两种方法我试过后 发现第一种 比较快 。。 但是在DB2 执行时会 越来越慢 ,从刚开始的 10秒钟 删除5000 条 ,减慢到3~4 分钟删除5000 条。。。。
不知有什么办法可以改善删除效率 呢 ?? 因为这些表都不停的有插入操作,所以要定时删除一些过期的数据 。。

论坛徽章:
0
2 [报告]
发表于 2005-02-18 09:13 |只看该作者

写了一个删除数据的存储过程,执行起来比较慢,请指教

自己顶一下

论坛徽章:
0
3 [报告]
发表于 2005-02-19 18:12 |只看该作者

写了一个删除数据的存储过程,执行起来比较慢,请指教

这两种删除效率都不是很高,
且不知道你的日志空间有多大,5000条一次也太少了点,另找一个分批删除的条件试试

论坛徽章:
0
4 [报告]
发表于 2005-02-21 10:22 |只看该作者

写了一个删除数据的存储过程,执行起来比较慢,请指教

刚开始删除头100W条并不算太慢 ,30分钟左右。 但是越来越慢 。。一天之后 , 到了 每100w 需要 50小时的地步 !! 。。 好像reorg 之后又会快一些 。。 但是总不会要 每次都手工reorg 一下 那么麻烦把。

论坛徽章:
0
5 [报告]
发表于 2005-02-21 10:25 |只看该作者

写了一个删除数据的存储过程,执行起来比较慢,请指教

发现每次删除 3000 条 比 每次5000 条要快 。。 而且速度减得比较缓慢 。但始终还是 会慢得 忍无可忍。。。。。

论坛徽章:
0
6 [报告]
发表于 2005-02-23 12:43 |只看该作者

写了一个删除数据的存储过程,执行起来比较慢,请指教

现在发现是 查询的时候 会越来越慢 。。就是说 fetch 花费的时间越来越  多 。 。 到底是什么原因呢?

论坛徽章:
5
荣誉会员
日期:2011-11-23 16:44:17CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-09-18 15:15:45未羊
日期:2014-02-25 14:37:19射手座
日期:2014-12-26 22:55:37
7 [报告]
发表于 2005-02-23 14:08 |只看该作者

写了一个删除数据的存储过程,执行起来比较慢,请指教

因为DB2需要做RUNSTAT来优化查询,呵呵。

论坛徽章:
0
8 [报告]
发表于 2005-02-23 16:01 |只看该作者

写了一个删除数据的存储过程,执行起来比较慢,请指教

如果时间太久了,你可以使用reorgchk工具来查看,表是否需要重组了,
如果需要的话,你可以执行reorg,
还有,如果你的应用不会中途断掉的话,那么你可以加上不写日志的开关,这样delete速度可以得到很大的提高。

论坛徽章:
0
9 [报告]
发表于 2005-02-23 22:38 |只看该作者

写了一个删除数据的存储过程,执行起来比较慢,请指教

[quote]原帖由 "wolfop"]因为DB2需要做RUNSTAT来优化查询,呵呵。[/quote 发表:

但是我的表结构 和 表空间并没有太大的变化 。runstat 可以在程序运行中执行吗?

论坛徽章:
0
10 [报告]
发表于 2005-02-23 22:43 |只看该作者

写了一个删除数据的存储过程,执行起来比较慢,请指教

原帖由 "Law" 发表:
如果时间太久了,你可以使用reorgchk工具来查看,表是否需要重组了,
如果需要的话,你可以执行reorg,
还有,如果你的应用不会中途断掉的话,那么你可以加上不写日志的开关,这样delete速度可以得到很大的提高。

我主要是查询慢 。。 比如 如果删除到 100 w 之后   fetch 5000 条的时间大概是 200多秒  ; delete 那5000 条的时间是 0.9 秒  ; commit 用了 0.8秒 。。。 而且我fetch 的条件就是 那张表的主键 ,有索引 。。 分析过了。 。证明 DB2 查询时也用了该索引。 。 既然用了索引 那跟表的内容大小没有什么关系了巴 ??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP