什么是条带化
条带化:就是将数据分布到不同的物理磁盘上的方法。一般使用RAID 0或者RAID 5. 数据是根据stripe size分布到不同的物理磁盘上。
那怎么设置正确的stripe size?
首先stripe size必须是OS block size和oracle block size的整数倍。
举例:一个8K的block size的文件系统存放Oracle的数据文件,那么stripe size必须是8k
或者8k的整数倍。
这样是为了避免stripe crossing。在这种情况下,数据库的一个单个读写操作,最终会被os执行,
当数据库的一个block size超过了stripe size,这样会带来不必要的附加的IO,导致慢的
性能。
针对大的连续访问的IO,确保stripe width (带宽)是系统最大的IO大小的整数倍。
确保一个数据库的IO读写只访问每个物理磁盘一次。比如说
stripe size × stripe width = 1M,db_block_size * DB_FILE_MULTIBLOCK_READ_COUNT =
32K × 32 = 1M。这样数据库的一个IO读写访问导致所有的磁盘只访问一次。
针对单个数据库IO的访问,确保单个OS磁盘一次IO访问来实现。
一般来说:OLTP应用要求更小的stripe size,而DSS则是要求更大的stripe size。
对大部分unix系统来说,1M的stripe size是一个好的起点。
Oracle的block size是8k
一个连续读是单块读。如果db_block_size是8k,那么就是读8K的内容。一个单块读只要由
一个磁盘服务就可以了,不需要所有的磁盘来服务。
OS block size: redo log和archived log的IO大小。
在不同的os下有不同的block size,在linux下可以用下列命令查看:
点击(此处)折叠或打开
- [root@localhost ~]# tune2fs -l /dev/sda5
- ...
- Block size: 4096
- ...
在ASM系统下可以用下列语句查询:
点击(此处)折叠或打开
- SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ
- 2 FROM SYS.x$ksppi x, SYS.x$ksppcv y
- 3 WHERE x.inst_id = USERENV ('Instance')
- 4 AND y.inst_id = USERENV ('Instance')
- 5 AND x.indx = y.indx
- 6 AND x.ksppinm LIKE '%_asm%'
- 7 /
-
- NAME VALUE DESCRIB
- ---------------------------------------- ------------------------------ ----------------------------------------
-
- _asm_ausize 1048576 allocation unit size
- _asm_blksize 4096 metadata block size
- (块大小是4096)
- _asm_maxio 1048576 Maximum size of individual I/O request
- (最大IO是1M)
- _asm_stripewidth 8 ASM file stripe width
- _asm_stripesize 131072 ASM file stripe size
Maximum OS I/O size:系统最大IO的大小:
根据steven Adms的 http://www.ixora.com.au/scripts/sql/multiblock_read_test.sql ,
db_file_multiblock_read_count = 128, 那么maximum IO size = 128 * 8K = 1024 K = 1 M
ASM的最大的IO大小是1M
点击(此处)折叠或打开
- NAME VALUE DESCRIB
- ---------------------------------------- ------------------------------ ----------------------------------------
-
- _asm_ausize 1048576 allocation unit size
- _asm_blksize 4096 metadata block size
- (块大小是4096)
- _asm_maxio 1048576 Maximum size of individual I/O request
- (最大IO是1M)
DB_FILE_MULTIBLOCK_READ_COUNT: Oracle一次读取的块数是db_file_multiblock_read_count = 16
注意:如果这个值太大的时候,就需要减小以防止在表扫描的时候缓存被冲掉
在线事务处理系统一般是4到16, 如果DSS和数据仓库系统,则取最大的值
(最大的IO大小)/db_block_size = 1m/8k = 128
谢谢
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25105315/viewspace-684478/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25105315/viewspace-684478/