磁盘类型与IOPS性能指标

目录

1.磁盘的访问模式

2.磁盘分类

[2.1 HDD机械磁盘](#2.1 HDD机械磁盘)

[2.1.1 机械磁盘性能](#2.1.1 机械磁盘性能)

[2.1.2 IOPS](#2.1.2 IOPS)

[2.1.3 提升IOPS性能手段](#2.1.3 提升IOPS性能手段)

[2.1.4 RAID技术](#2.1.4 RAID技术)

[RAID 0](#RAID 0)

[RAID 1](#RAID 1)

[RAID 5](#RAID 5)

[RAID 6](#RAID 6)

[RAID 10](#RAID 10)

[RAID 50](#RAID 50)

RAID总结

[2.2 SSD固态硬盘](#2.2 SSD固态硬盘)

[2.2.1 查看磁盘调度算法](#2.2.1 查看磁盘调度算法)

[2.2.2 修改磁盘调度算法](#2.2.2 修改磁盘调度算法)

[2.2.3 参数innodb_flush_neighbors](#2.2.3 参数innodb_flush_neighbors)

[2.2.4 参数innodb_log_file_size](#2.2.4 参数innodb_log_file_size)

[2.2.5 SSD选择](#2.2.5 SSD选择)

3.文件系统与操作系统


1.磁盘的访问模式

顺序、随机访问严格意义上说是逻辑的

2.磁盘分类

左边是HDD机械磁盘,右边是SSD固态硬盘,mysql一般要用SSD

2.1 HDD机械磁盘

2.1.1 机械磁盘性能

机械磁盘顺序访问性能好,100M/s的速度叫做带宽(磁盘吞吐率)

机械磁盘随机访问性能较差,每次随机读都会去旋转定位

2.1.2 IOPS

IOPS(Input/Output Operations Per Second)即每秒处理IO的能力,用来形容随机访问性,数据库比较多的是随机访问,通过B+tree索引定位是比较随机的,如果是顺序的话通常来说是扫描,比如join,但是mysql大部分用作OLTP系统,所以大部分看重IOPS性能,机械硬盘7200转/分钟的IOPS是7200/60=120。

每次IO可以4k、8k、16k甚至1M都可以,上面的图 4KB Random Write-MB/s Intel x25-E 64G(SLC)换算成IOPS是1MB/4KB*48=12288

一般的磁盘1次IO是4KB(块大小,业界默认),mysql中innodb_page_size(块大小)是16K,所以IOPS需要除以4

2.1.3 提升IOPS性能手段

raid和共享存储设备都是将多块盘组成一个逻辑设备 ,raid对IOPS性能提升非常有限

2.1.4 RAID技术

RAID(Redundant Array of Independent Disks)即独立磁盘冗余阵列,RAID技术将多个单独的物理硬盘以不同的方式组合成一个逻辑硬盘,从而提高了硬盘的读写性能和数据安全性。

RAID 0

条带化(数据分块)但没有冗余,提供较高的读写性能。

  • 优点:可以提高读写速度,对于需要处理大型文件的应用程序非常有用。
  • 缺点:不提供数据冗余,一旦硬盘出现故障,所有数据都将丢失。
  • 适用场景:适用于对数据冗余要求不高的应用,如游戏、视频编辑、图形处理等。
RAID 1

又称镜像(Mirror),数据同时一致写到主硬盘和镜像硬盘,提供容错能力。

  • 优点:提供了良好的数据冗余和保护,可以容忍一个硬盘的故障,数据仍然可以从其他硬盘中恢复。
  • 缺点:需要使用更多的硬盘以实现数据冗余,读写性能可能会受到影响。
  • 适用场景:适用于对数据可靠性要求较高的场景,如数据库、文件服务器等。
RAID 5

条带化加分布式奇偶校验,提供数据冗余和读取性能,RAID 5是最常用的RAID方式之一。

  • 优点:提供了良好的数据冗余和性能,可以容忍一个硬盘的故障,且读取性能较高。
  • 缺点:写入性能可能受到影响,且在发生故障时进行重建需要较长时间。
  • 适用场景:适用于多读少写的应用,如Web服务器、文件共享等。
RAID 6

类似于RAID 5,但提供更高级别的容错能力。

  • 优点:提供了更好的数据冗余和可靠性,可以容忍两个硬盘的故障。
  • 缺点:需要使用更多的硬盘以实现更高的数据冗余,写入性能可能会受到影响。
  • 适用场景:适用于需要高可靠性和数据冗余的应用,如金融和医疗领域。
RAID 10

将镜像和条带进行两级组合的RAID级别,第一级是RAID1镜像对,第二级为RAID 0,提供较高的容错能力和读写性能。RAID10也是一种应用比较广泛的RAID级别。

  • 优点:提供了较好的性能和数据冗余,可以容忍一个或多个硬盘的故障。
  • 缺点:需要使用更多的硬盘,成本较高。
  • 适用场景:适用于需要高性能和可靠性的应用,如虚拟化服务器、数据库等。
RAID 50

RAID 5组合成RAID 0,提供较高的性能和容错能力。

  • 优点:提供较高的数据传输速度和系统性能,更高级别的数据冗余,同时发生多个驱动器故障,仍能恢复丢失的数据。
  • 缺点:较高的成本,配置和管理复杂性。
  • 使用场景:适用于需要高性能和更高级别的数据冗余的场景,如大规模数据存储、图形渲染和动画制作、虚拟化环境
RAID总结
RAID级别 最小磁盘数 容错能力 磁盘空间开销 读取速度 写入速度 硬件成本
RAID 0 2 0%
RAID 1 2 单个磁盘 50%
RAID 5 3 单个磁盘 1 / N
RAID 6 4 两个磁盘 2 / N
RAID 10 4 多个磁盘 50%
RAID 50 6 单个磁盘 1 / N

2.2 SSD固态硬盘

2.2.1 查看磁盘调度算法

[root@localhost ~]# cat /sys/block/sda/queue/scheduler 
noop [deadline] cfq

2.2.2 修改磁盘调度算法

[root@localhost ~]# echo cfq > /sys/block/sda/queue/scheduler
[root@localhost ~]# cat /sys/block/sda/queue/scheduler 
noop deadline [cfq] 
[root@localhost ~]# echo deadline > /sys/block/sda/queue/scheduler
[root@localhost ~]# cat /sys/block/sda/queue/scheduler 
noop [deadline] cfq

是SSD的话,强烈要求使用deadline算法

2.2.3 参数innodb_flush_neighbors

innodb_flush_neighbors是MySQL InnoDB存储引擎的一个配置参数,用于控制邻近页的刷新行为。它影响了InnoDB在刷新脏页到磁盘时的写入策略。

在 InnoDB 中设置 innodb_flush_neighbors这个参数的值为 0,来规定 MySQL只刷当前脏页,MySQL 8 这个值默认是 0,MySQL 5.7默认是1

innodb_flush_neighbors参数的取值可以是0或1,具体含义如下:

当innodb_flush_neighbors设置为1时,InnoDB会尽量按照邻近页的顺序进行刷新,以提高顺序写入的效率。这意味着InnoDB会将邻近的脏页一起刷新到磁盘,而不是单独刷新每个脏页。

当innodb_flush_neighbors设置为0时,InnoDB将按照页号的顺序进行刷新,而不考虑邻近页。这可能导致更多的随机写入操作,但在某些场景下可能适用。

2.2.4 参数innodb_log_file_size

innodb_log_file_size参数是用来设置InnoDB存储引擎的日志文件大小的。修改此参数后重启mysql才能生效。在MySQL中,日志文件用来记录数据库的变更操作,包括事务的提交和回滚。在设置innodb_log_file_size参数时,需要考虑以下几个因素:

  • 日志文件大小的合理性:日志文件大小太小会导致频繁的切换和写入操作,降低数据库的性能,而日志文件大小太大则会占用较多的磁盘空间。
  • 磁盘空间的可用性:在调整日志文件大小时,需要确保磁盘空间足够存储新的日志文件。

根据服务器性能配置来设置,innodb_log_file_size=4G等等

2.2.5 SSD选择

推荐intel

3.文件系统与操作系统

提高挂载性能

mount -o noatime,nobarrier /dev/sdb1 /data

  • noatime参数:这个选项可以阻止在文件被访问时更新文件的访问时间,这可能会稍微提高文件访问的性能,因为不需要更新inode
  • nobarrier参数:这个选项主要用于"barrier"的用途,barrier是一种同步数据写入到磁盘和提交数据到日志的方法。在某些情况下,例如电源故障,可能会导致数据丢失,因此需要barrier。但是,在使用某些SSD或RAID配置时,可以禁用barrier以获得更好的性能。
相关推荐
奥顺互联V5 分钟前
一次性部署:使用Docker部署PHP应用
大数据·mysql·开源·php
小黄人软件11 分钟前
20241220流水的日报 mysql的between可以用于字符串 sql 所有老日期的,保留最新日期
数据库·sql·mysql
dessler17 分钟前
Docker-如何启动docker
运维·docker·云原生·容器·eureka
zhy2956317 分钟前
【DOCKER】基于DOCKER的服务之DUFS
运维·docker·容器·dufs
无为之士22 分钟前
Linux自动备份Mysql数据库
linux·数据库·mysql
秋名山小桃子32 分钟前
Kunlun 2280服务器(ARM)Raid卡磁盘盘符漂移问题解决
运维·服务器
与君共勉1213833 分钟前
Nginx 负载均衡的实现
运维·服务器·nginx·负载均衡
MZWeiei43 分钟前
Zookeeper基本命令解析
大数据·linux·运维·服务器·zookeeper
Arenaschi1 小时前
在Tomcat中部署应用时,如何通过域名访问而不加端口号
运维·服务器
XiaoH2331 小时前
培训机构Day15
sql·mysql