磁盘相关知识点入门
Posted ---wunian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了磁盘相关知识点入门相关的知识,希望对你有一定的参考价值。
Ⅰ、磁盘的访问模式
磁盘性能和磁盘的访问模式有关
Sequential access
Random access
上面说的顺序和随机是逻辑上的,大多时候做不到完全顺序
数据库不是连续块的申请空间,是一次申请固定块大小的空间,在这一个块里面的数据是连续的
Ⅱ、HDD VS SSD
随机访问的性能叫IOPS,顺序访问的性能叫吞吐率
2.1 简单了解HDD
- 机械磁盘,通过磁头旋转定位,单块盘一般100IOPS
- 数据库的优化都是根据机械磁盘特性,随机转顺序,通过磁头旋转进行数据定位
- 常见转速,笔记本5400r/min,台式机7200r/min,服务器硬盘1w/min,1.5w/min
- 顺序访问性能较好,100M/s/~200M/s,这叫磁盘吞吐率,也叫带宽,可以通过做raid来提升磁盘带宽,可以做到一两个G
- 随机访问性能较差,需要磁头旋转定位,IOPS较低
为什么数据库比较多的是随机访问?
B+ tree索引定位数据是比较随机的,所以数据库最看重的就是随机IO,也就是IOPS,顺序的话通常就是扫描了,两张表做join的话比的就是顺序的性能,mysql通常用在大并发,小事务的OLTP场景
知道转速,对应的IOPS也出来了
IOPS=转速/60
带宽怎么转换为IOPS
每做一次io操作,io的大小是不一定的,比如4k的操作,通常厂商都给的数据都是4k大小的io,注意,MySQL中每个IO的大小是16k,即每个页的大小,所以和厂商给的性能数据相比会有所下降
48M的宽带算IOPS就是,1M/4k*48=12288
如何提升HDD的IOPS性能
做raid
功耗非常高通过购买共享存储
价格昂贵
共享存储,做高可用很方便,但是单点故障太坑爹,就像坐飞机,一般没问题,出了问题基本上就是死
然而提升都是非常有限的
tips:
通常来说数据库做raid10,性能和可靠性都要有保障
2.2 SSD
- 固态硬盘,无磁头,纯电设备,控制器和闪存组成。单块盘7~8wIOPS
- 读写速度非对称,一般来说写比读慢一半,高端ssd是对称的,机械盘也是对称的
- 性能下降,以前的ssd用一段时间性能会急剧下降,现在基本解决了,强烈推荐英特尔的盘
- 设备短命,性能抖动的问题现在也不用担心
- 用MySQL一定要用SSD
SSD与数据库优化
1、磁盘调度算法设置为deadline或者noop,在ssd上,这个调整性能至少提升百分之七十,甚至多倍,现在CentOS7默认磁盘调度算法已经是deadline了而不是cfq
cat /sys/block/vda/queue/scheduler
echo deadline > /sys/block/vda/queue/scheduler
上面这个可以作一个模板,规定,HDD也因该这么设置,只是性能提升没这么大
2、InnoDB参数调整
InnoDB存储引擎参数设置
innodb_flush_neighbors = 0 -- 默认1,平缓刷新的,默认只刷脏页,不会将脏页所在的整个区刷新,把这个设为0,重做日志大小足够大,数据库测试时性能比较平稳,还有一定的提升
innodb_log_file_size = 4G -- 默认128M,高端设备设置8G和16G都不为过,MySQL5.5最大只能设1.9G,无限接近于2G
innodb_io_capacity 设置为存储性能的一半
修改之后重启,等待时间比较长,是数据库在做扩展
上面两个配置不对性能抖动比较厉害,设置后性能平稳且提升百分之15
3、SSD的选择——PCIE or SATA/SAS?
SATA/SAS与PCIE的性能差距逐渐减小,PCIE快非常多,甚至达到50w,100wIOPS,没什么上限
PCIE的性能很少有应用可以完全使用,优先选择SATA/SAS接口的SSD
数据库的瓶颈已经不在磁盘上了
SSD品牌推荐:Intel、FusinIO、宝存
以上是关于磁盘相关知识点入门的主要内容,如果未能解决你的问题,请参考以下文章