设为首页 加入收藏

TOP

MySQL数据库在IO性能优化方面的设置选择(硬件)(一)
2019-09-17 18:09:05 】 浏览:43
Tags:MySQL 数据库 性能 优化 面的 设置 选择 硬件

提起MySQL数据库在硬件方面的优化无非是CPU、内存和IO。下面我们着重梳理一下关于磁盘I/O方面的优化。

1.磁盘冗余阵列RAID

RAID(Redundant Array of Inexpensive Disk)的基本目的是把小型廉价的硬盘合并成一块大容量的硬盘,用于解决数据冗余性并降低成本,且提高数据处理性能。

1.1 RAID的优点

RAID的优点可以从高传输速率和容错两方面来阐述:

(1)提高传输速率。RAID通过在多个磁盘上同时存储和读取数据来大幅提高存储系统的数据吞吐量(Throughput)。在RAID中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个磁盘驱动器几倍、几十倍甚至上百倍的速率。这也是RAID最初想要解决的问题。因为当时CPU的速度增长很快,而磁盘驱动器的数据传输速率无法大幅提高,所以需要有一种方案解决二者之间的矛盾。

(2)通过数据校验提供容错功能。普通磁盘驱动器无法提供容错功能,如果不包括写在磁盘上的CRC(循环冗余校验)码的话。RAID容错是建立在每个磁盘驱动器的硬件容错功能之上的,所以它提供更高的安全性。在很多RAID模式中都有较为完备的相互校验/恢复的措施,甚至是直接相互的镜像备份,从而大大提高了RAID系统的容错度,提高了系统的稳定冗余性。

1.2RAID常见类别

RAID0 数据在从内存缓冲区写入磁盘时,根据磁盘数量将数据分成N份,这些数据同时并发写入N块磁盘,使得数据整体写入速度是一块磁盘的N倍。读取时也是一样的。因此RAID0具有极快的数据读写速度。但是RAID0不做数据冗余,N块磁盘中只要一块损坏,数据完整性就被破坏,所有的数据都会损坏,即任何一块硬盘的损坏都将导致数据的丢失。

 

RAID1 数据在写入磁盘时,将一份数据同时写入两块磁盘,这样任何一块磁盘损坏都不会导致数据丢失,插入一块新磁盘就可以通过复制数据的方式自动修复,具有极高的可靠性。但对应的存储能力有所降低,如两块相同硬盘组成的RAID1,则容量为其中一块硬盘的大小,即磁盘利用率为50%。

 

RAID5 RAID5也是一种普遍使用的RAID类型,是一种存储性能、数据安全和存储成本兼顾的存储解决方案。磁盘空间利用率要比RAID1高,存储成本相对较低。RAID5 和RAID4、RAID3相比,校验数据分布在阵列中的所有磁盘上,而没有采用专门的校验磁盘。对于数据和校验数据,它们的写操作可以同时发生在完全不同的磁盘上。因此, RAID5 不存在 RAID4 中的并发写操作时的校验盘性能瓶颈问题。另外, RAID5 还具备很好的扩展性。当阵列磁盘 数量增加时,并行操作量的能力也随之增长,可比 RAID4 支持更多的磁盘,从而拥有更高的容量以及更高的性能。RAID5 的磁盘上同时存储数据和校验数据,数据块和对应的校验信息存保存在不同的磁盘上,当一个数据盘损坏时,系统可以根据同一条带的其他数据块和对应的校验数据来重建损坏的数据。与其他 RAID 等级一样,重建数据时, RAID5 的性能会受到较大的影响。

 

说明:图中零散分布 ABCD为校验数据

RAID10  结合RAID0和RAID1两种方案。Raid 10其实结构非常简单,首先创建2个独立的Raid1,然后将这两个独立的Raid1组成一个Raid0,当往这个逻辑Raid中写数据时,数据被有序的写入两个Raid1中。磁盘1和磁盘2组成一个Raid1,磁盘3和磁盘4又组成另外一个Raid1;这两个Raid1组成了一个新的Raid0。如写在硬盘1上的数据0、2、4、6 写在硬盘2中则为数据0、2、4、6,硬盘3中的数据为1、3、5、7,硬盘4中的数据则为1、3、5、7,因此数据在这四个硬盘上组合成Raid10,且具有raid0和raid1两者的特性。虽然Raid10方案造成了50%的磁盘浪费,但是它提供了200%的速度和单磁盘损坏的数据安全性,并且当同时损坏的磁盘不在同一Raid1中,就能保证数据安全性。假如磁盘中的某一块盘坏了,整个逻辑磁盘仍能正常工作的。 当我们需要恢复RAID 10中损坏的磁盘时,只需要更换新的硬盘,按照RAID10的工作原理来进行数据恢复,恢复数据过程中系统仍能正常工作。原先的数据会同步恢复到更换的硬盘中。

 1.3 总结

 为数据库服务器配置RAID的时候,建议采用RAID10配置,尽管RAID10会更浪费空间,但它提供了更好的性能。直观地将,采用RAID5时,由于需要更新校验数据信息,所以每写一次数据,都需要读取数据奇偶信息,经过计算后,再更新校验数据,让后再写入实际数据,而RAID10则是直接写入数据。

2. 尽可能地使用SSD硬盘

SSD(Solid State Disk 或 Solid State Drive 固态硬盘)是一种基于永久性存储器的计算机外部存储设备。

与传统磁盘相比,其性能非常惊艳。

特点 数据对比
高IOPS IOPS 即1秒内能够完成的读写次数,是存储性能的最直接的表现。传统磁盘每秒差不多可以完成200次IO请求,而SSD每秒钟可以高达60万次。
低延迟 低延迟 即主机下达存储指令后,存储介质完成存储并返回正确应答的时间。传统磁盘由于驱动马达转动盘片和摇动磁头手臂,完成单个IO需要2000微妙左右,而SSD只需要不到100微妙。
低功耗 如果使用传统的磁盘来创建接近SSD性能的磁盘阵列总功耗高达几百到上千瓦;而一块PCIe SSD的功耗不会超过25瓦。
大容量 传统磁盘容量在4TB以下,并且增长困难,而PCIe SSD已有单盘 12.8TB的容量,并且增长趋势可期。
故障率低且可预测 传统磁盘由于是机械部件,故障不可预测,年故障率在百分之三左右,而SSD的故障可以预测,年故障率在千分之五以内。
抗震能力强,且无噪音 传统磁盘是机械旋转设备,对震动敏感,甚至引发磁盘停转,同时马达也会发出噪音;而SSD完全是电子元件,抗震能力强,且不噪声。

3 IO调度策略--SSD推荐设置为noop,SATA为deadline

3.1  IO调度器

每个块设备或者块设备的分区,都对应有自身的请求队列(request_queue),而每个请求队列都可以选择一个I/O调度器来协调所递交的requestI/O调度器的基本目的是将请求按照它们对应在块设备上的扇区号进行排列,以减少磁头的移动,提高效率。每个设备的请求队列里的请求将按顺序被响应。实际上,除了这个队列,每个调度器自身都维护有不同数量的队列,用来对递交上来的request进行处理,而排在队列最前面的request将适时被移动到请求队列中等待响应。

 IO调度器在内核栈中所处位置如下:

      

 3.2 调度算法

内核中实现的IO调度器主要有四种--Noop,Deadline,CFG, Anticipatory。

如果简单概括总结的的话:1.NOOP 先进先出  2.Deadline 截止时间调度程序 3.CFQ 完全公平排

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇通过存储函数获取序列 下一篇MySQL 关于性能的参数配置梳理

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目