磁盘类型与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以获得更好的性能。
相关推荐
武子康32 分钟前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
java·大数据·数据仓库·hive·hadoop·mysql
黑色叉腰丶大魔王37 分钟前
《MySQL 数据库备份与恢复》
mysql
运维&陈同学43 分钟前
【zookeeper01】消息队列与微服务之zookeeper工作原理
运维·分布式·微服务·zookeeper·云原生·架构·消息队列
是阿建吖!44 分钟前
【Linux】进程状态
linux·运维
Ljw...1 小时前
索引(MySQL)
数据库·mysql·索引
明明跟你说过1 小时前
Linux中的【tcpdump】:深入介绍与实战使用
linux·运维·测试工具·tcpdump
OpsEye1 小时前
MySQL 8.0.40版本自动升级异常的预警提示
数据库·mysql·数据库升级
Ljw...1 小时前
表的增删改查(MySQL)
数据库·后端·mysql·表的增删查改
Mr_Xuhhh2 小时前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
i道i9 小时前
MySQL win安装 和 pymysql使用示例
数据库·mysql