Mysql 硬盘性能测试

一般硬盘分为机械硬盘和固态硬盘,在mysql的服务器中,强烈建议使用固态硬盘,因为固态硬盘的IOPS, 主要是固态硬盘的随机读取的速度比较高。

IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。
随机读写频繁的应用,如小文件存储(图片)、OLTP数据库、邮件服务器,关注随机读写性能,IOPS是关键衡量指标。
顺序读写频繁的应用,传输大量连续数据,如电视台的视频编辑,视频点播VOD(Video On Demand),关注连续读写性能。数据吞吐量是关键衡量指标。

简单理解就是:

磁盘的 IOPS,也就是在一秒内,磁盘进行多少次 I/O 读写。

磁盘的吞吐量,也就是每秒磁盘 I/O 的流量,即磁盘写入加上读出的数据的大小。

有些硬盘的厂商有时候给的是吞吐量,也就是带宽。怎么计算IOPS

例如第一个Intel x25-E 64GB 的这个盘的iops = 1M / 4kb * 48 = 1024 / 4 * 48 = 12288

① 1M中有多少个块, 上面是以4kb为一个块, 

② 48M/s 的吞吐量, 那么IO就是 1M / 4kb * 48 = 1024 / 4 * 48 = 12288

跟硬盘相关的mysql配置

innodb_flush_neighbors = 0  ##硬盘刷新比较平缓,效率高,

innodb_log_file_size = 4G     ##如果硬盘比较大的话,可以设置8G

Linux查看磁盘的性能

① iostat -xm 3

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.02    0.00    1.02    0.00    0.00   97.95

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.0

  • rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
  • wrqm/s: 每秒对该设备的写请求被合并次数
  • r/s: 每秒完成的读次数
  • w/s: 每秒完成的写次数
  • rkB/s: 每秒读数据量(kB为单位) 读的吞吐量
  • wkB/s: 每秒写数据量(kB为单位) 写的吞吐量
  • avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
  • avgqu-sz: 平均等待处理的IO请求队列长度
  • await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
  • svctm: 平均每次IO请求的处理时间(毫秒为单位)
  • %util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率

 我们上面的IOPS = r/s + w/s 的值

② 使用 sysbench  命令测试硬盘性能

-file-num=N    创建文件的数量,默认值:128。由N个文件组成。
--file-block-size=N    每次IO操作的block大小,默认值:16K。
--file-total-size=SIZE    所有文件大小总和,默认值:2G。
--file-test-mode=STRING    测试模式:seqwr(顺序写), seqrewr(顺序读写), seqrd(顺序读), rndrd(随机读), rndwr(随机写), rndrw(随机读写)。
--file-io-mode=STRING    文件操作模式:sync(同步),async(异步),mmap(快速map映射),默认值:sync。
--file-async-backlog=N    每个线程排队的异步操作数,默认值[128]。
--file-extra-flags=[LIST,...]    使用额外的标志符来打开文件{sync,dsync,direct}。默认值空
--file-fsync-freq=N    在完成N次请求之后,执行fsync(),0表示不使用fsync,默认值:100。
--file-fsync-all[=on|off]    每次写操作后执行fsync(),默认值:off。
--file-fsync-end[=on|off]        测试结束后执行fsync(),默认值:on。
--file-fsync-mode=STRING    使用fsync或fdatasync方法进行同步,默认值:fsync。
--file-merged-requests=N    尽可能的合并N个IO请求数,0表示不合并,默认值:0。
--file-rw-ratio=N                测试时候的读写比例,默认值:1.5(即3:2)。
--max-time=300  ##最大的测试时间 300S, 如果设置5s那么5s就测试完成

--max-requests=0 ## 最大的请求,随便请求

--num-threads=128 ## 多少个线程数进行测试

--report-interval=1 ## 每秒中输出结果

A)准备4块硬盘测试

sysbench --test=fileio --file-num=4 --file-block-size=16384 --file-total-size=4G prepare

 B) 刚刚申请的4块硬盘开始测试  这里测试的是 rndrd  随机读的模式

sysbench --test=fileio --file-num=4 --file-block-size=16384 --file-total-size=4G --file-test-mode=rndrd --file-extra-flags=direct --max-time=300 --max-requests=0 --file-fsync-freq=1 --num-threads=128 --report-interval=1 run

用sysbench测试的硬盘结果是吞吐量: reads: 33.45 M/s, 我们这里测试的是块是--file-block-size=16384(16kb) 那么iops = 1M / 16kb * 33.45 = 2112 (需要注意的是我们这里测试的是 16KB的块,我们一般指标是4K) 我这里测试的阿里云的服务器。

这个时候也可以看 iostat -xm 3 的数据

读的吞吐量差不多的都是32/s 33M/s

读的iopss是2089跟我们算的 2112也差不多

如果我们把上面的 --max-time=5 改成5 则跑完之后就会出来测试报告

C) 测试完成后 需要把刚刚分配的空间释放掉

sysbench --test=fileio --file-num=4 --file-block-size=16384 --file-total-size=4G cleanup

 ③ innodb_io_capacity 的设置

当我们用上面的工具测试出了硬盘的iops,我们就需要在mysql中设置,mysql读写硬盘的iops,

一般来说就用硬盘的 iopo / 2的值, mysql默认是200,这就是为什么有时候我们的服务器买了固态硬盘后,感觉磁盘的读写还是比较慢的原因。

这里还需要介绍一个变量innodb_flush_method = O_DIRECT

意思是说,当我们的mysql在写入磁盘的时候,不经过操作系统层的空间缓存,而是直接写入磁盘。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值