如何设置适合大小的stripe size对数据库?

首页 > MySQL, MySQL Innodb > Raid1+0 stripe size for MySQL InnoDB

Raid1+0 stripe size for MySQL InnoDB


MySQL InnoDB使用 Raid 1+0 stripe size 大小该如何配置?

By: 谭俊青@MySQL实验室


要理解Raid 1+0,我们首先要先理解Raid 0,看下图:

左图为 4kb stripe size;右图为 64kb stripe size
存储文件大小:红色:4kiB,蓝色:20kiB,绿色:100kiB,紫色:500kiB

Raid 0 准确的来说应该称 AID 0
大家可以看到,如果stripe size设置过大,在单线程的情况下起不到提速作用。而设置过小又会产生多次IO操作。因此我们通过简化模型,将大部分请求的文件块大小(IO_SIZE)除以RAID0 的磁盘数量(DISK_NUM)来估算stripe size大小(stripe size=IO_SIZE / DISK_NUM)。

比如MySQL InnoDB,假设平时大部分请求文件块的大小为1M(16kb*64),那么在8块盘组成的Raid1+0的情况下stripe size=1024kb / 4 = 256kb。这时候将Raid的条带大小配置为256kb是比较合适的。MyISAM存储引擎使用情况相对复杂。

实际上管理和磁盘定位等还有一定开销,更为主要的是不同的业务,请求的文件块大小相差很大,所以在实际环境中很难一刀切说多大的stripe size最佳,因此在估算之后可以上下浮动评测,选择适合自己系统的最优大小的stripe size。

顺便今天在MySQL实验室的2个群里调查了下,stripe size大小为64kb、256kb基本各占50%。

-- -------------

SDO:测试下8块及以上盘阵 strip size 256k最佳

点评网:256k

畅游:512k 综合效果更好 (来源评论)


评论 (4) Trackbacks (0) 发表评论 Trackback
  1. ruochen
    2011年12月20日16:44 | #1
    回复 | 引用

    假设平时大部分请求文件块的大小为1M(16kb*64)—这个如何测量?

  2. 谭俊青
    2011年12月20日16:50 | #2
    回复 | 引用

    @ruochen
    1M是由double write buffer估计出来的

  3. zhang
    2012年2月2日18:18 | #3
    回复 | 引用

    hi tan
    “大家可以看到,如果stripe size设置过大,在单线程的情况下起不到提速作用。而设置过小又会产生多次IO操作。

  4. 上面说道的,为什么你会特别提到 在这里,那多线程又如何,能稍微把这些展开点吗?
    谢谢 :)



  5. 谭俊青
    2012年2月5日22:42 | #4
    回复 | 引用

    @zhang
    stripe size过大,单线程只能利用到一块磁盘,因此起不到提速作用。
    而如果是多线程的话,则不一样,其他线程的io操作可能对应raid上是另外一块磁盘,所以也可以利用到多块磁盘的io,只是单个io没办法充分发挥raid的性能。

 ===================================================================================         

//设置过小又会产生多次IO操作  

深度挖掘:Oracle RAC数据库架构分析与实战攻略   3.2.7.1  条带深度  |io优化


//设置过小不会产生多次IO操作   

大话存储2 p89  不是分批


3.2.7.3  条带大小计算方法

《深度挖掘:Oracle RAC数据库架构分析与实战攻略》第3章存储和网络传输

http://book.51cto.com/art/201202/320379.htm

stripe width(条带宽度):RAID中的磁盘数,就是组成这个stripe的磁盘数。例如,4个磁盘组成的RAID 0,条带宽度就是4。

stripe depth(条带深度):单块磁盘上条带的大小,有时也称为stripe unit。

stripe size(条带大小):stripe depth×stripe width。有时也称block size块大小、chunk size簇大小、stripe length条带长度、granularity粒度,是单块磁盘上的每次I/O的最小单位。

RAID条带大小的另一个计算公式为:

条带大小=(0.25×平均定位时间×数据传输速率×(并发用户数-1)×1.024)+0.5KB。

平均定位时间=(平均延时+平均寻道时间)(ms);数据传输速率单位为:Mbps;1.024 = 1s/1000ms×1024KB/1MB(单位转换因子)。

举例来说,磁盘寻道时间是6ms,传输速率80MB,且有20个并发用户的条带大小应该为:(0.25×6×80×19×1.024)+0.5=2335.22KB(差不多2MB)。


3.2.7 条带化设置

需要根据系统的I/O要求来合理地选择这些数据。对于Oracle数据库系统来说,比较合理的条带深度是从256KB到1MB。

你可能感兴趣的:(磁盘管理,存储系统,RAID,oracle,SQL语句优化调优,oracle系统性能优化及管理)