ITPub博客

首页 > 数据库 > Oracle > 条带化的理解:请大家看看有没有错误

条带化的理解:请大家看看有没有错误

原创 Oracle 作者:dbs101 时间:2011-01-22 23:26:40 0 删除 编辑

什么是条带化

 

条带化:就是将数据分布到不同的物理磁盘上的方法。一般使用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下可以用下列命令查看:

点击(此处)折叠或打开

  1. [root@localhost ~]# tune2fs -l /dev/sda5
  2. ...
  3. Block size: 4096
  4. ...

在ASM系统下可以用下列语句查询:


点击(此处)折叠或打开

  1. SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ
  2.   2 FROM SYS.x$ksppi x, SYS.x$ksppcv y
  3.   3 WHERE x.inst_id = USERENV ('Instance')
  4.   4 AND y.inst_id = USERENV ('Instance')
  5.   5 AND x.indx = y.indx
  6.   6 AND x.ksppinm LIKE '%_asm%'
  7.   7 /

  8. NAME VALUE DESCRIB
  9. ---------------------------------------- ------------------------------ ----------------------------------------

  10. _asm_ausize 1048576 allocation unit size
  11. _asm_blksize 4096 metadata block size
  12. (块大小是4096)
  13. _asm_maxio 1048576 Maximum size of individual I/O request
  14. (最大IO是1M)
  15. _asm_stripewidth 8 ASM file stripe width
  16. _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

点击(此处)折叠或打开

  1. NAME VALUE DESCRIB
  2. ---------------------------------------- ------------------------------ ----------------------------------------

  3. _asm_ausize 1048576 allocation unit size
  4. _asm_blksize 4096 metadata block size
  5. (块大小是4096)
  6. _asm_maxio 1048576 Maximum size of individual I/O request
  7. (最大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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-12-18

  • 博文量
    92
  • 访问量
    437999