磁盘相关知识点入门

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、宝存












以上是关于磁盘相关知识点入门的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统基础入门知识磁盘存储管理-基本分区

LINUX系统---初级相关操作和知识

磁盘及磁盘管理相关知识

Python入门基础知识

文件系统与linux相关知识点

Java入门:百度Java开发工资