2017-08-18 40 views
0

我有一个数据库oracle 11g,经过进程delete后中止删除进程oracle工作很慢,我重启了服务器几次但没有帮助,那我看我怎么修复问题,请帮忙经过进程删除和中止删除oracle工作很慢

+0

你删除了什么? –

+0

我删除表中的数据只有大约25.000.000行,我取消了这个过程,取消后工作veri缓慢 –

+0

似曾相识,再次与这个问题;-)甲骨文是/回滚交易。不知道什么样的状态,一旦你反弹了服务器tho – tbone

回答

0

如果您的表中没有更多数据,请尝试执行truncate您的表,使用此子句您将清除内存,并且您的查询将再次快速。这里https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10007.htm#SQLRF01707

TRUNCATE TABLE employees_demo; 

更多的细节同样的问题How to stop oracle undo process?

+0

这个过程中止,在此之后我重新启动服务器几次,但没有帮助 –

+0

@AniSevanyan是的,我明白了。你可以向你的桌子查询吗? –

+0

是的,数据库的工作,但veri比较早慢 –

2

在简化:

当你放弃delete语句,甲骨文已经做了一些工作,删除某些行。在删除行时,Oracle正在保存多版本并发控制所使用的UNDO,以便从其他事务中读取数据,直到该数据提交并在回滚的情况下使用。

中止删除时Oracle必须应用UNDO将这些行放回表中,因为删除语句是原子的。无论是发生或没有发生。应用UNDO的速度相对较慢,在完成之前将会使用资源。通过重新启动Oracle,额外的工作不会消失,Oracle将在应用完UNDO之后应用UNDO。

下一步将调查资源是否用于应用UNDO,或者如果缓慢有其他原因。不幸的是,我无法帮助解决问题。

检查回滚进度的一个快速方法是运行此查询,等待一分钟,再次运行它,并使用它来估计分钟数,直到数字收缩为零。一旦回滚开始,就无法停止或改进它。重新启动服务器并终止进程不会加快速度。您只需等到该数字变为0并且该行消失即可。

select used_urec from gv$transaction; 
+0

那么如果是这样的话,它会在UNDO后自行修复? –

+0

是的,如果应用UNDO是缓慢的根源,那么一旦完成,资源就会被释放。 –

+0

我该如何检查缓慢的来源 –