利用AIX条带化(STRIPE)优化数据库IO
一、背景
生产环境IBM P560目前用于Oracle DataGuard 的standby机器。在oracle Apply 归档日志时,查看服务器IO情况,发现Hdisk0、1上的IO有时候能达到到100%。而Hdisk2、3上IO活动很少。
经分析,oracle的数据文件存放目录放在/oradata,该目录建立在hdisk0、1上。故在数据库发生读写数据文件时,只有hdisk0,1有IO。另外2块盘IO活动少。故考虑将数据库文件从rootvg迁移出来,将数据库的归档文件建立在rootvg里,达到平均分布服务器的IO的目的。
二、理论支持
一般以LVM管理的存储,一个vg中可能会有很多pv,同样的,一个lv可能跨越多块pv,为了使硬盘存储速度加快,就会用到条带化的技术,即把连续的数据分成大小相同的数据块,然后依次存储在各个pv上。类似于RAID0,使存储速度加快。但并不会使数据像RAID0一样危险容易丢失,因为在正式使用中,不会像此时做测试一样没有任何保障地将多块硬盘做成一个vg,而是普遍连接的后台存储,在划分LUN之前,已经在物理硬盘上做好RAID5或RAID1,在RAID5或RAID1的基础上再划分出多块LUN,即系统上的pv,即使pv所在硬盘损坏,但有底层的硬RAID冗余,并不会丢失数据。
条带单元大小:即条带化的LV中,每一个条带单元的大小,对应于I/O中数据块的大小。对于Oracle来讲,db_block_size即设定的数据块大小。而db_file_multiblock_read_count就一次读取时最多并行的数据块的个数,db_block_size和db_file_multiblock_read_count相乘即一次总的I/O大小。这个大小不能超过操作系统的最大I/O (max_io_size)值。在ORACLE应用中,lv条带的大小一般设置为两倍或两倍以上的Oracle块大小,因为假如设置成与Oracle数据块相同大小,无法保证Oracle数据块的边界正好与条带单元的边界对应,如果不对应的话,就会出现大量的一个I/O由两个条带单元,来处理的情况。
条带大小的原则:对于高并发并且IO请求小的情况下,一块物理硬盘处理多个I/O请求,低并发但I/O请求较大时,可能需要多块硬盘处理一个I/O请求。原则上的要求是一次I/O请求能被一次性处理完成。
大概的条带化的概念就是这样。
三、参数提取
- P560A:/#lspv
- hdisk0 00c3ee9e3439bc67 rootvg active
- hdisk1 00c3ee9e5033384d rootvg active
- hdisk2 00c3ee9eae48cc48 rootvg active
- hdisk3 00c3ee9eae48df75 rootvg active
- P560A:/#lspv -l hdisk0
- hdisk0:
- LV NAME LPs PPs DISTRIBUTION MOUNT POINT
- hd10opt 8 8 00..00..08..00..00 /opt
- hd3 40 40 00..00..40..00..00 /tmp
- hd1 4 4 00..00..04..00..00 /home
- hd2 16 16 00..00..16..00..00 /usr
- hd9var 4 4 00..00..04..00..00 /var
- hd8 1 1 00..00..01..00..00 N/A
- hd4 4 4 00..00..04..00..00 /
- hd5 1 1 01..00..00..00..00 N/A
- hd6 32 32 00..00..32..00..00 N/A
- tsmdb 30 30 20..10..00..00..00 /tsmdb
- oradatalv 278 278 49..11..00..109..109 /oradata
- oraclelv 40 40 40..00..00..00..00 /home/oracle
- weblogiclv 40 40 00..40..00..00..00 /weblogic
- weblogic9lv 40 40 00..40..00..00..00 /weblogic9
- lg_dumplv 8 8 00..08..00..00..00 N/A
- P560A:/#lspv -l hdisk1
- hdisk1:
- LV NAME LPs PPs DISTRIBUTION MOUNT POINT
- hd10opt 8 8 00..00..08..00..00 /opt
- hd3 40 40 00..00..40..00..00 /tmp
- hd1 4 4 00..00..04..00..00 /home
- hd2 16 16 00..00..16..00..00 /usr
- hd9var 4 4 00..00..04..00..00 /var
- hd8 1 1 00..00..01..00..00 N/A
- hd4 4 4 00..00..04..00..00 /
- hd5 1 1 01..00..00..00..00 N/A
- hd6 32 32 00..00..32..00..00 N/A
- tsmdb 30 30 20..10..00..00..00 /tsmdb
- oradatalv 324 324 89..17..00..109..109 /oradata
- fwdump 2 2 00..02..00..00..00 /var/adm/ras/platform
- weblogiclv 40 40 00..40..00..00..00 /weblogic
- weblogic9lv 40 40 00..40..00..00..00 /weblogic9
- P560A:/#lspv -l hdisk2
- hdisk2:
- LV NAME LPs PPs DISTRIBUTION MOUNT POINT
- oradatalv 598 598 152..223..223..00..00 /oradata
- P560A:/#lspv -l hdisk3
- hdisk3:
- LV NAME LPs PPs DISTRIBUTION MOUNT POINT
- archlog_lv 400 400 00..223..177..00..00 /archivelog
- P560A:/#lslv -l oradatalv
- oradatalv:/oradata
- PV COPIES IN BAND DISTRIBUTION
- hdisk0 278:000:000 3% 049:011:000:109:109
- hdisk1 324:000:000 5% 089:017:000:109:109
- hdisk2 598:000:000 37% 152:223:223:000:000
- P560A:/#lslv -l oraclelv
- oraclelv:/home/oracle
- PV COPIES IN BAND DISTRIBUTION
- hdisk0 040:000:000 0% 040:000:000:000:000
- P560A:/#lslv -l archlog_lv
- archlog_lv:/archivelog
- PV COPIES IN BAND DISTRIBUTION
- hdisk3 400:000:000 55% 000:223:177:000:000