oracle删除大量数据后,变慢的问题

codecola 2011-06-14 04:42:03
我在oracle中对一个表进行删除操作,该表中至少有几百万条记录,每次删除几十万条记录,每1000条commit一次。
在删除的过程中和删除完成的一段时间内,会发生oracle响应非常慢的情况,无论是连接还是查询。
我该如何查找原因?
怎么解决?
...全文
1519 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
codecola 2011-07-05
  • 打赏
  • 举报
回复
感谢各位大牛的回复!
有些方法可行,单比较麻烦。
因为数据清理工作没有时间上的限制,所以采用每删除一定量的数据就sleep一段时间,给数据库做维护工作的时间。这样做就不会导致高水位线的问题,只不过数据清理的时间会比较长。
amdgaming 2011-06-23
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 bearfishshow 的回复:]

当使用delete进行删除数据时,对应表的高水位线并不会下降,也就是说当你查询时还是相当于在你之前的总记录数当中进行数据查询,所以会慢;我觉得这是一个原因!
同意楼上那些大牛的观点,可以采用分区表,然后直接truncate操作应该就能解决问题了;
[/Quote]
学习。
lzx313 2011-06-22
  • 打赏
  • 举报
回复
在网上百度了下,看到了这个帖子,不知道你是否试过?
http://www.chinabyte.com/biz/cbfwq/82/2679582.shtml
灰哥 2011-06-22
  • 打赏
  • 举报
回复
当使用delete进行删除数据时,对应表的高水位线并不会下降,也就是说当你查询时还是相当于在你之前的总记录数当中进行数据查询,所以会慢;我觉得这是一个原因!
同意楼上那些大牛的观点,可以采用分区表,然后直接truncate操作应该就能解决问题了;
codecola 2011-06-22
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 lzx313 的回复:]

在网上百度了下,看到了这个帖子,不知道你是否试过?
http://www.chinabyte.com/biz/cbfwq/82/2679582.shtml
[/Quote]

我也是分段提交的,但测试来看性能与该帖子差距很大
zjwssg 2011-06-22
  • 打赏
  • 举报
回复
马上做一个系统信息收集
skyblueseal 2011-06-21
  • 打赏
  • 举报
回复
学习了
codecola 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 minitoy 的回复:]

如果表可以按时间分区的话,就可以直接truncate分区.
[/Quote]

分区比较麻烦,能够自动分区吗?
慢的原因是不是要写大量的undo和redo,以及索引重建上了?
psufnxk2008 2011-06-19
  • 打赏
  • 举报
回复
csdn中有位高手说between...and ...这个效率的问题,找不到他个帖子了.
jdsnhan 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 minitoy 的回复:]
如果表可以按时间分区的话,就可以直接truncate分区.
[/Quote]

同意这个观点。可以先对表进行分区处理,然后truncate分区
zhwh 2011-06-17
  • 打赏
  • 举报
回复
select sql_text,executions,buffer_gets,disk_reads from v$sql;
其中 cpu使用对应的是buffer_gets,磁盘io使用对应的是disk_reads.
biandongfeng 2011-06-16
  • 打赏
  • 举报
回复
alter table table_name shrink space;
biandongfeng 2011-06-16
  • 打赏
  • 举报
回复
alter table table_name deallocate;
刚查了一下 试下上面的语句
biandongfeng 2011-06-16
  • 打赏
  • 举报
回复
这个是没办法的事情,因为大量的删除操作导致这个表的高水位,看怎么把水位降下来
小灰狼W 2011-06-16
  • 打赏
  • 举报
回复
查一下等待事件
minitoy 2011-06-16
  • 打赏
  • 举报
回复
如果表可以按时间分区的话,就可以直接truncate分区.
codecola 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 codecola 的回复:]

引用 9 楼 superboy20071207 的回复:

建言删除时使用nologging关键字,不保留日志,能快一点


正准备这么试试呢。。。
[/Quote]

试验失败!
日志对性能影响很小。

2. 效率:9000条/秒(一开始能达到,性能很快会下降到9000条/分钟)
是oralce在重建索引而占用的大量的系统资源吗?
怎么查?
codecola 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 superboy20071207 的回复:]

建言删除时使用nologging关键字,不保留日志,能快一点
[/Quote]

正准备这么试试呢。。。
superboy20071207 2011-06-15
  • 打赏
  • 举报
回复
建言删除时使用nologging关键字,不保留日志,能快一点
zhwh 2011-06-15
  • 打赏
  • 举报
回复
在sqlplus下查询这几个视图或表就行了
加载更多回复(7)

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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