如何设置适合大小的stripe size对数据库?
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 综合效果更好 (来源评论)
上面说道的,为什么你会特别提到 在这里,那多线程又如何,能稍微把这些展开点吗?
谢谢
===================================================================================
//设置过小又会产生多次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。
https://blog.****.net/haiross/article/details/38536823
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 综合效果更好 (来源评论)
上面说道的,为什么你会特别提到 在这里,那多线程又如何,能稍微把这些展开点吗?
谢谢
===================================================================================
//设置过小又会产生多次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。
https://blog.****.net/haiross/article/details/38536823