社区
Oracle
帖子详情
oracle删除大量数据后,变慢的问题
codecola
2011-06-14 04:42:03
我在oracle中对一个表进行删除操作,该表中至少有几百万条记录,每次删除几十万条记录,每1000条commit一次。
在删除的过程中和删除完成的一段时间内,会发生oracle响应非常慢的情况,无论是连接还是查询。
我该如何查找原因?
怎么解决?
...全文
1519
27
打赏
收藏
oracle删除大量数据后,变慢的问题
我在oracle中对一个表进行删除操作,该表中至少有几百万条记录,每次删除几十万条记录,每1000条commit一次。 在删除的过程中和删除完成的一段时间内,会发生oracle响应非常慢的情况,无论是连接还是查询。 我该如何查找原因? 怎么解决?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
Oracle
表
删除
大量
数据
(千万)后查询
变慢
问题
(原因分析)
Oracle
表
删除
大量
数据
(千万)后查询
变慢
问题
(原因分析)
解决
Oracle
表
删除
大量
数据
后查询
变慢
问题
Oracle
表
删除
大量
数据
后,即使表中只有几行记录,但用select count(*) from table 来查询发觉都不会马上出来,原因是该表的空间大了
Oracle
表
删除
大量
数据
后查询
变慢
问题
Oracle
表
删除
大量
数据
后,即使表中只有几行记录,但用select count(*) from table 来查询发觉都不会马上出来,原因是该表的空间大了,查询起来很慢。解决的方法是把该表所占用的表空间缩小,或者说释放表空间。 alter table XXXX move; 这样处理后就释放了表空间了。但是释放表空间后,表的行号rowid会发生变化,而基于rowid的索引则会变成无效。因此该操
Oracle
数据
表
大量
数据
删除
后查询
变慢
问题
近期发现一张
数据
表经常了转移备份操作,并在
删除
掉
大量
数据
后,发现反而比表中有百万条
数据
的时候查询速度还慢 最后查找原因是因为对应存放大
数据
量的表的表空间还是很大了,一般没有特殊设定的情况下表空间大小为64KB,所以尽管表里面更少的
数据
但是查询的速度还是非常地慢。这个时候可以用以下代码查看对应表所占表空间的大小 select sum(bytes)/(1024*1024) from user_segm...
Oracle
表
删除
大量
数据
后查询
变慢
问题
【转】
Oracle
表
删除
大量
数据
后,即使表中只有几行记录,但用select count(*) from table 来查询发觉都不会马上出来,原因是该表的空间大了,查询起来很慢。解决的方法是把该表所占用的表空间缩小,或者说释放表空间。 alter table XXXX move; 这样处理后就释放了表空间了。但是释放表空间后,表的行号rowid会发生变化,而基于rowid的索引则会变成无效。因此该操
Oracle
17,086
社区成员
55,238
社区内容
发帖
与我相关
我的任务
Oracle
Oracle开发相关技术讨论
复制链接
扫一扫
分享
社区描述
Oracle开发相关技术讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章