有一个数据库standby库恢复时经常赶不上主库的进度用iostat x 查看磁盘利用率的时候发现三个放数据文件的盘(每个盘是由个物理盘做的raid)的读iops在以内磁盘利用率在%以内所以初步分析恢复的慢应该跟io利用率不高有关所以考虑使用并行恢复提高恢复速度
开始尝试并行恢复时有时并行恢复起不来alertlog里提示如下信息
Tue Oct ::
ALTER DATABASE RECOVER managed standby database parallel disconnect from session
Attempt to start background Managed Standby Recovery process
MRP started with pid=
MRP: Background Managed Standby Recovery process started
attempting to start a parallel recovery with processes
parallel recovery failed to get any processes
nonparallel recovery will be done
Media Recovery Log /data/arch/hzbops/hzbops_arc
有时又可以起来但最多能够启动个并行进程分析发现并行启动不了是因为nofile值设置过小导致而并行最多启动个原因是parallel_max_servers 参数值设置为
对这个数据库做了如下调整
参数 parallel_max_servers
这个参数限制了实际可以起的并行进程数要在初始化参数里设置参数文件里默认没有oracle会给出一个默认值这个默认值可能过小需要调大一些
这个数据数据库从改成
/etc/security/nf 中的nofile 值调大默认是改成
* soft nofile
nofile指定了每个用户打开的文件数oracle目前有数据文件个开个进程并行恢复的话就需要个文件句柄所以之前设置的有点小调整完后需要关闭数据库然后退出oracle用户后再进入oracle用户让这个设置生效前面的那个并行启动不了的原因就是这个参数设置的过小
这里再检查IO看到io利用率上去了恢复进度也比以前快了很多:
avgcpu: %user %nice %sys %iowait %idle
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrqsz avgqusz await svctm %util
sda
sda
sda
sda
sda
sda
sda
sda
sda
sda
sdb
sdb
sdc
sdc
sdd
sdd
sde
sde
sdf
sdf