摘要
数据的存储方式对应用程序的整体性能有着极大的影响。对数据的存取,是顺利读写还是随机读写?将数据放磁盘上还将数据放flash卡上?多线程读写对性能影响?面对着多种数据存储方式,我们如何选择?本文给大家提供了一份不同存储模式下的性能测试数据,方便大家在今后的程序开发过程中可以利用这份数据选择合适的数据存储模式。
TAG
存储性能,innodb性能,存储介质
目录… 1
简介… 1
存储性能分析… 2
测试程序说明:… 2
存储测试数据:… 2
Mysql innodb性能测试… 4
Mysql(InnoDB)刷盘策略… 6
c/s模式通信性能… 6
直接文件存储… 7
文件IO方式… 7
完全随机写还是跳跃,5倍的性能差距… 8
多线程随机读、处理速度、响应时间… 9
系统缓存… 10
系统缓存相关的几个内核参数… 10
dirty页的write back. 10
总结… 11
数据的存储方式对应用程序的整体性能有着极大的影响。对数据的存取,是顺利读写还是随机读写?将数据放磁盘上还将数据放flash卡上?多线程读写对性能影响?面对着多种数据存储方式,我们如何选择?
本文会对不同存储方式做详细的性能测试,以提供给大家一份不同存储方式下的性能测试数据为主,同时会简单介绍各种存储方式之间的性能差异。
影响储存速度有各个方面的原因,包括存储介质、读写盘方式以及硬件环境对读写盘时的影响。这里主要分享存储速度的一些调研结果。
CPU: INTER Nehalem E5620 2.4GHZx2
内存: PC-8500 4GB*8
硬盘: 300G 10k*2, RAID:1
Flash: SSD 160GB_MLC X25-M G2×6
网卡: 千兆
数据量:117G
测试共分两套程序:
a) 存储测试程序均使用pread/pwrite进行存储测试,块链遍历速度采用frs开发的块链库进行。
b) 为了减少随机读写时系统缓存带来的影响
i. 将数据量增大至117G
ii. 每次数据只被测试一次
iii. 程序入口处清内存
c) 测顺序读写时,一次读写所有数据。
d) 测随机读写时,每次读4KB,读381MB。
a) 采用ub + ubrpc实现压力工具的服务器端和客户端。
b) UBSVR_NODELAY
c) 常用的Idl规范
d) 对两个不同大小的包请求进行测试
磁盘
顺序读:145.59MB/s
随机读:0.91MB/s (每次读4KB,读381MB)
顺序写:83.1MB/s
随机写:0.34MB/s (每次写4KB, 写381MB)
Flash
顺序读:61.5MB/s
随机读:14.9MB/s (每次读4KB,读381MB)
顺序写:59.8MB/s
随机写:1.93MB/s (每次写4KB, 写381MB)
内存
顺序写:1655MB/s
随机写:1496MB/s
Eg: 块链遍历速度1000万元素, 565582 us
磁盘与flash卡的顺序读写性能对比(单位MB):
磁盘与flash卡的随机读写性能对比(单位MB):
对比磁盘和flash卡的随机读写性能,我们可以看到:对于写操作而言,其在磁盘和flash卡上的性能差异较小,且事实上其性能差异会随着随机写时每次写入的数据量以及flash卡块大小等其它因素而产生波动;同时,在带写优化的flash上,当将数据写入flash卡时,数据会先写到一块buffer中,当满足一定条件(如buffer满)后,会将buffer的数据刷入flash,此时会阻塞写,因此会带来性能抖动。所以,当应用程序的多数操作是写入操作时,若没有flash卡也可以勉强将数据放到磁盘上。
但是相反,从测试结果看,在磁盘和flash卡上的随机读性能有着8倍甚至更多的差距,所以当程序读磁盘操作相当多时,把数据放到flash卡上是一个比较好的选择。比如,对于一个随机查询较多数据库应用程序,我们可以考虑把数据库的存储文件放到flash卡上。
另一方面,我们可以直观地看到,无论顺序读还是顺序写,在磁盘上的速度都远远高于在flash卡上的速度。所以如果程序所需的数据是从磁盘一次载入,载入后对数据的修改都是内存操作,不直接写盘,当需要写盘时,也是一次将内存中的数据dump到磁盘上时。我们都应该将数据放到磁盘,而不是flash卡上。
bitsCN.com