2 发现问题的瓶颈 RMAN在做备份、恢复时所做的操作说起来很简单,就是把数据从“源”读到缓冲区,然后自读缓冲区写到“目的地”这样的一个过程,并在这个过程中完成数据块的校验工作。这一过程中会发生很多的操作,如果而某一操作慢了我们则称其为瓶颈。调优的过程也就是找出瓶颈并处理掉的过程,当然对于RMAN的调优也是这样的。
2.1 确定备份源与备份设备的最大速度 在查找瓶颈前我们首先要对自己的设备速度心里有个数,包括从磁盘读出速度和磁带写的带度,备份的速度不可能超出这两个速度,只能尽量的接近。确定磁盘读速度可以在数据服务器负载高峰期做一下sar –d,把物理盘的blks/s这一列加起来,再乘上操作系统块的大小便可以得出速度。也可以挑出一些盘或LV,做对/dev/null的dd操作,然后用sar –d 进行观察,测算速度。 备份设备的速度可以通过并行备份多个数据量大点的文件系统获得。
2.2 通过v$session_longops监测RMAN的性能,发现瓶颈 对于DBA来说,v$session_longops是一个很有用的视图,超过6秒的操作会被记录在这个视图中。对于RMAN调优来说,这个视图更加的有用,可以通过这个视图观看RMAN的各个操作已经花费了多少时间,还需要多少时间,每一部分使用了多少时间。这对于我们发现瓶颈在哪是很有帮助的。 举例: SQL> SELECT A.SID,
2 A.PROGRAM,
3 A.STATUS,
4 B.OPNAME,
5 b.ELAPSED_SECONDS,
6 B.TIME_REMAINING
7 FROM V$SESSION A, V$SESSION_LONGOPS B
8 WHERE A.SID = B.SID
9 AND A.SERIAL# = B.SERIAL#
10 AND upper(A.PROGRAM) LIKE '%RMAN%'
11 AND TIME_REMAINING > 0
12 /
SID PROGRAM STATUS OPNAME ELAPSED_SECONDS TIME_REMAINING
--- -------------------------- -------- ---------------------------------- --------------- --------------
23 RMAN@sun480-1 (TNS V1-V3) ACTIVE RMAN: incremental datafile backup 7 3
24 RMAN@sun480-1 (TNS V1-V3) ACTIVE RMAN: incremental datafile backup 12 18
2 rows selected.
2.3 通过v$backup_sync_io和v$backup_async_io可以监测IO是否有瓶颈。 备份最主要的部分是IO操作,因此IO也是最可能产生瓶颈的地方。如果可以观察实际的备份的速率,可以观察到备份过程中的等待,这将对于我们查找哪些地方存在瓶颈大我帮助。Oracle提供了v$backup_sync_io和v$backup_async_io这两张视图用于这方面的监测。从字面意思可以看出v$backup_sync_io表现的是同步IO方式,而v$backup_async_io表现的是异步IO方式。 v$backup_sync_io和v$backup_async_io这两张视图中的数据存在的周期是实例运行的过程中。当数据库被重新启动,这两张视图中的数据会被清空。在备份、恢复过程中,每个数据文件信息、数据文件汇总信息、每一个备份片(piece)在视图中都会有一行数据。
2.3.1 同步IO瓶颈 通过如下语句查一下v$backup_sync_io视图,关注一下TYPE为AGGREGATE值的discrete_bytes_per_second这一列。这一列表示每秒中以同步方式备份、恢复数据的字节数,这个值应该接近于备份设备的读、写速率,如果这个值很小于备份设备读写速率,我们优化的机会就来了,可以从CPU负载、备份的进程、网络、MML接口的配置等几方面进行检查、优化。 脚本: SELECT device_type device,
TYPE,
filename,
to_char(open_time,'yyyymmdd hh24:mi:ss') OPEN,
to_char(close_time,'yyyymmdd hh24:mi:ss') CLOSE,
elapsed_time elapse,
discrete_bytes_per_second d_bytes
FROM v$backup_sync_io
WHERE close_time>SYSDATE-1
ORDER BY close_time
2.3.2 异步IO瓶颈 2.3.2.1 关注每秒备份、恢复的效率 与同步IO方式有些相似,查询v$backup_async_io这张视图,不过需关注TYPE为AGGREGATE值的effective_bytes_per_second这一列,在实际的系统中,基本用的都是异步IO的方式,因此这个视图用的频率特别的多。 例: SQL> SELECT device_type device,
2 TYPE,
3 filename,
4 to_char(open_time,'yyyymmdd hh24:mi:ss') OPEN,
5 to_char(close_time,'yyyymmdd hh24:mi:ss') CLOSE,
6 elapsed_time elapse,
7 effective_bytes_per_second e_bytes
8 FROM v$backup_async_io
9 WHERE close_time>SYSDATE-1
10 ORDER BY close_time
11 /
DEVICE TYPE FILENAME OPEN CLOSE ELAPSE E_BYTES
------ ---------- ----------------- ------ ----------
DISK INPUT /yang/oradata/orcl/indx01.dbf 20070924 10:16:21 20070924 10:16:22 100 26214400
DISK INPUT /yang/oradata/orcl/users01.dbf 20070924 10:16:22 20070924 10:16:22 0
DISK INPUT /u02/app/oracle/product/9.2.0/ 20070924 10:16:22 20070924 10:16:22 0
dbs/snapcf_orcl.f
DISK INPUT /yang/oradata/orcl/tools01.dbf 20070924 10:16:22 20070924 10:16:23 100 10485760
DISK INPUT /yang/oradata/orcl/users02.dbf 20070924 10:16:22 20070924 10:16:23 100 5242880
DISK AGGREGATE 20070924 10:16:21 20070924 10:16:24 300 59419307
DISK OUTPUT /yang/backup/db_incr0_63412658 20070924 10:16:21 20070924 10:16:24 300 1135957
1_91_1
DISK INPUT /yang/oradata/orcl/example01.d 20070924 10:16:21 20070924 10:16:24 300 41943040
bf
DISK AGGREGATE 20070924 10:16:22 20070924 10:16:27 500 45088768
DISK OUTPUT /yang/backup/db_incr0_63412658 20070924 10:16:22 20070924 10:16:27 500 15848243
1_92_1
DISK INPUT /yang/oradata/orcl/system01.db 20070924 10:16:22 20070924 10:16:27 500 52428800
f
DISK OUTPUT /yang/backup/db_incr0_63412658 20070924 10:16:22 20070924 10:16:27 500 27738112
1_93_1
DISK AGGREGATE 20070924 10:16:22 20070924 10:16:27 500 52753203
DISK INPUT /yang/oradata/orcl/undotbs01.d 20070924 10:16:22 20070924 10:16:27 500 41943040
bf
DISK AGGREGATE 20070924 10:16:34 20070924 10:16:34 0
DISK INPUT /yang/arch/arch1_64.arc 20070924 10:16:34 20070924 10:16:34 0
DISK OUTPUT /yang/backup/arch_634126593_94 20070924 10:16:34 20070924 10:16:34 0
_1
DISK OUTPUT /yang/backup/arch_634126593_96 20070924 10:16:34 20070924 10:16:34 0
_1
DISK INPUT /yang/arch/arch1_66.arc 20070924 10:16:34 20070924 10:16:34 0
DISK AGGREGATE 20070924 10:16:34 20070924 10:16:34 0
DISK AGGREGATE 20070924 10:16:34 20070924 10:16:35 100 31287808
DISK INPUT /yang/arch/arch1_65.arc 20070924 10:16:34 20070924 10:16:35 100 31287808
DISK OUTPUT /yang/backup/arch_634126593_95 20070924 10:16:34 20070924 10:16:35 100 31289344
_1
23 rows selected.
SQL>
同样,当effective_bytes_per_second这一列表示每秒中以异步方式备份、恢复数据的字节数,这个值应该接近于备份设备的读、写速率,如果这个值很小于备份设备读写速率,我们优化的机会就来了,可以从备份的进程、CPU资源、网络、MML接口的配置等几方面进行检查、优化。
2.3.2.2 关注IO等待 在说这个问题之前先解释一下v$backup_async_io这张视图与IO等待相关的几列: IO_COUNT:整个IO的总数 READY:异步方式buffer请求,buffer立即可以获复的次数。 SHORT_WAITS:请求buffer不能立即获得,不过经过简短非的阻塞方式轮询可获的次数。 LONG_WAITS: 请求buffer不能获得,需经过阻塞的等待,等待IO设备的次数。 LONG_WAIT是重点关注的对象,当LONG_WAITS/IO_COUNT这个值比较高时表明IO方式存在着瓶颈。需要注意一下相关的文件,看一下IO分布是不是存在问题。 |