提高rollback的速度

提高rollback的速度

 

 

现象:

 

1、客户端使用sqlplus、rapid sql等工具响应较慢

2、主机cpu使用率较高,主要是IO等待很高

3、操作系统层面操作响应慢

 

过程:

1、查看alter日志,发现有大量如下信息:

Thread 1 cannot allocate new log, sequence xxxx

Checkpoint not complete

 

select group#,members,status from v$log;

发现只有3个group,每个group1个member(默认配置),而且一个状态是current,另外两个是active,很显然redo group不够。

 

2、查看后台进程,发现ora_p000...ora_p015共16个进程在运行,该主机2颗cpu,共8个核心,连接到数据库中查看FAST_START_PARALLEL_ROLLBACK参数值为LOW,即默认值。

这个值表明并行运行的回滚进程有2*number of cpu,刚好是16个进程,与使用ps –ef | grep ora_p看到的一致。

 

原因:

同事通过db_link向这个数据库插入数据(1千多万行),执行了一个多小时,看到未执行完毕,就停止并rollback了,因此产生大量的回滚!为什么回滚这么慢呢?由Checkpoint not complete可知redo log group太少,LGWR在切换到新的group时,需要等待DBWR把数据写入到datafile。

 

解决:

1、增加redo log group

alter database add logfile group 4 ('/usr/oracle/oradata/sid/redo04.log') size 209715200;

依次增加到10个group。根据需要适当添加,只要status出现inactive即可。

 

2、加快回滚速度

提高并行回滚进程的数量,设置为HIGH时回滚进程=4*cpu数。

ALTER SYSTEM SET FAST_START_PARALLEL_ROLLBACK=HIGH

 

回滚操作由于要写入redo文件,其本身就是很消耗系统资源的。当在Oracle中回滚长期运行的事务时,需要查看V$SESSION_LONGOPS并评估还需要多少时间。

另:跨库插入大量数据时,最好找dba或系统管理员使用expdp/impdp或其他效率更高的方法来操作!

posted @ 2012-04-01 17:06  wbzhao  阅读(410)  评论(0编辑  收藏  举报