移动数据文件,平衡磁盘负载
通过v$filestat和v$dbfile视图的联合查询,找出热点文件。主要是indx和USERS表空间所属的这两个文件。
今天在做性能测试的时候,发现查询TT_AUDITPURGE业务表的时候datavg的I/O占用比率很高,但由于是新release的build,且department内部release的installation guide还没有提级数据I/O优化这快儿,那么在instance这一级,做了一点分散I/O的optimzer.其实很简单:
通过v$filestat和v$dbfile视图的联合查询,找出热点文件。主要是indx和USERS表空间所属的这两个文件,在read和write上占用了大量的I/O,目前所有数据文件都是放在一块盘上。造成了磁盘的负载不均衡,导致I/O很高。
SQL> select name,phyrds,phywrts,readtim,writetim 2 from v$filestat a,v$dbfile b 3 where a.file#=b.file# 4 order by readtim desc; NAME --------------------------------------------------------- PHYRDS PHYWRTS READTIM WRITETIM ---------- ---------- ---------- ---------- /oradata/irmdb/indx01.dbf 55981 4096 12858 208530 /oradata/irmdb/users01.dbf 65990 12561 5269 536128 /oradata/irmdb/system01.dbf 8300 1808 3345 6259 /oradata/irmdb/sysaux01.dbf 2257 7330 1398 12258 /oradata/irmdb/undotbs01.dbf 92 24161 44 613217 |
开始迁移这两个数据文件和undo表空间中的数据文件分开存储。通过这种移动数据文件的到其他disk的方式来均衡我们的文件I/O,由于不是生产环境,所以我们把表空间直接offline.
SQL>alter tablespace INDX offline; System altered. SQL>! $cp /oradata/irmdb/indx01.dbf /oradata2/irmdb/indx01.dbf; SQL>alter tablespace INDX rename datafile '/oradata/irmdb/indx01.dbf' to '/oradata2/irmdb/indx01.dbf'; SQL>alter tablespace tablespace online; |
USERS表空间的修改也如INDX一样,其实就是移动了一下数据文件。