MySQL 磁盘 I/O 问题

MySQL 磁盘 I/O 问题

参考

  • 《深入浅出 MySQL 全文》第 22 章 磁盘 I/O 问题

磁盘 I/O 问题

作为应用系统的持久化层,不管数据库采取了什么样的 Cache 机制,但数据库最终总是要将数据存储到可以长久保存的 I/O 设备上,但磁盘的存取速度显然
要比 CPU、RAM 的速度慢很多,因此,对于比较大的数据库,磁盘 I/O 一般总会称为数据库的一个性能瓶颈!

前面提到的 SQL 优化、数据库对象优化、数据库参数优化,以及应用程序优化,大部分都是想通过减少或延缓磁盘读写来减轻磁盘 I/O 的压力及其对性能的影响。
解决磁盘 I/O 问题,减少或延缓磁盘操作肯定是一个重要方面,但磁盘 I/O 是不可避免的,因此,增强磁盘 I/O 本身的性能和吞吐量也是一个重要方面。

使用磁盘阵列

RAID 是 Redundant Array of Inexpensive Disks 的缩写,翻译成中文就是 “廉价磁盘冗余阵列”,通常就叫做磁盘阵列。RAID 就是按照一定策略将数据
分布到若干物理磁盘上,这样不仅增强了数据存储的可靠性,而且可以提高数据读写的整体性能,因为通过分布实现了数据的 “并行” 读写。

常见 RAID 级别比较

RAID 级别特性优点缺点
RAID 0也叫条带化(Stripe),按一定 的条带大小(Chunk Size)将数 据依次分布到各个磁盘,没有 数据冗余数据并发读写速度快,无额 外磁盘空间开销,投资省数据无冗余保护,可靠性 差
RAID 1也叫磁盘镜像(Mirror),两个 磁盘一组,所有数据都同时写 入两个磁盘,但读时从任一磁 盘读都可以数据有完全冗余保护,只要 不出现两块镜像磁盘同时损 坏,不会影响使用;可以􏰁 高并发读性能容量一定的话,需要 2 倍 的磁盘,投资比较大
RAID 10是 RAID 1 和 RAID 0 的结合,也 叫 RAID 1+0。先对磁盘做镜像, 再条带话,使其兼具 RAID 1 的 可靠性和RAID 0的优良并发读 写性能可靠性高,并发读写性能优 良容量一定的话,需要 2 倍 的磁盘,投资比较大
RAID 4象 RAID 0 一样对磁盘组条带 化,不同的是:需要额外增加 一个磁盘,用来写各 Stripe 的 校验纠错数据RAID 中的一个磁盘损坏,其 数据可以通过校验纠错数据 计算出来,具有一定容错保 护能力;读数据速度快每个 Stripe 上数据的修改 都要写校验纠错块,写性 能受影响;所有纠错数据 都在同一磁盘上,风险大, 也会形成一个性能瓶颈; 在出现坏盘时,读性能会 下降
RAID 5是对 RAID 4 的改进:将每一个 条带(Stripe)的校验纠错数据 块也分布写到各个磁盘,而不 是写到一个特定的磁盘基本同 RAID 4,只是其写性 能和数据保护能力要更强一 点写性能不及 RAID 0、RAID 1 和 RAID 10,容错能力也不 及 RAID 1;在出现坏盘时, 读性能会下降

如何选择 RAID 级别

了解各种 RAID 级别的特性后,我们就可以根据数据读写的特点、可靠性要求,以及投资预算来选择合适的 RAID 级别,比如:

  • 数据读写都很频繁,可靠性要求也很高,最好选择 RAID 10;
  • 数据读很频繁,写相对较少,对可靠性有一定要求,可以选择 RAID 5;
  • 数据读写都很频繁,但可靠性要求不高,可以选择 RAID 0。

使用 Symbolic Links 分布 I/O

MySQL 的数据库名和表名是与文件系统的目录名和文件名对应的,默认情况下,创建的数据库和表都存放在参数 datadir 定义的目录下。这样如果不实用 RAID
或者逻辑卷,所有的表都存放在一个磁盘设备上,无法发挥多磁盘并行读写的优势!在这种情况下,我们就可以利用操作系统的符号连接(Symbolic Links)将不同
的数据库或表、索引指向不同的物理磁盘,从而达到分布磁盘 I/O 的目的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值