问题背景:
应用有一个每日跑批之前的备份作业,通过expdp备份应用的用户数据,数据量大概为600G左右,正常情况下可以在20分钟内跑完,但最近expdp备份完成时间却突然猛涨到要2小时32分才能备份完,导致后续的跑批作业都被延后,现需要协助分析备份作业为什么需要这么长时间才能完成备份以及如何恢复备份作业的执行效率。
问题分析:
首先检查了最近正常时间以及非正常时间下expdp执行备份的日志文件,可以看到正常完成的expdp备份消耗时间大概在17分钟左右
在非正常情况下,expdp备份的消耗时间需要2小时32分才能完成,此外备份过程并没有发生任何的报错
通过数据库的历史会话视图V$ACTIVE_SESSION_HISTORY查看expdp工作进程dw的等待情况
set linesize 400
set pagesize 20
col sample_time for a40
col program for a30
SELECT program,event,count(*)
FROM V$ACTIVE_SESSION_HISTORY
WHERE sample_time between timestamp '2023-12-22 23:00:00' and timestamp '2023-12-23 00:45:00'
and program like 'oracle%DW%'
group by program,event
order by 3;
可以看到dw进程的等待事件Datapump dump file I/O次数非常多,每个进程的等待次数都达到4000以上
注:Datapump dump file I/O等待事件说明dw进程在往备份目录写入dump文件时出现I/O等待操作
检查dump文件的存放目录/backup,发现目录是通过nfs方式挂载的盘不是本地目录,结合前面查到的dw进程都在等待dump文件的I/O操作,怀疑是不是nfs所在的网络带宽存在瓶颈,因为nfs盘的写入性能受网络带宽的影响很大,如果网络带宽不够,那么nfs盘的写入性能将会受到影响变得缓慢
数据库是RAC集群,默认刚好有配置了oswatch服务器资源监控采集工具,检查相关nfs目录的监控性能数据oswnfsiostat,可以看到在问题时间段目录的写入并不算高,每秒写入吞吐量4907.055kb/s,但是延时avg RTT(ms)却异常的高达到了345.524ms,从写入的吞吐量不高,但延时却很高这两个指标基本可以判断nfs挂载的目录存在网络带宽的瓶颈
问题解决:
跟用户沟通expdp备份作业的执行时间变长是由于nfs备份目录的写入性能缓慢导致,nfs备份目录写入缓慢的原因可能是由于网络带宽的瓶颈导致,得到用户的反馈昨晚他们刚对数据库新加了一个NBU的全备备份作业,使用的都是同一个的千兆网口,应该是这个操作导致了网络带宽被占用,后面沟通,将全备备份作业调整到了备库执行,避免网络带宽被占用
调整之后,expdp备份作业也随之恢复正常,备份时间重新回到20分钟以内
nfs盘的写入性能也得到极大的提升,每秒写入吞吐量40757kb/s,延时只有7ms左右。