操作系统和硬件优化
- 1、影响MySQL性能的因素
- 2、平衡内存和磁盘的资源
-
- [2.1 固态硬盘的垃圾回收](#2.1 固态硬盘的垃圾回收)
- [3 磁盘配置](#3 磁盘配置)
-
- [3.1 RAID性能优化](#3.1 RAID性能优化)
- [3.2 RAID监控、故障、恢复](#3.2 RAID监控、故障、恢复)
- [3.3 RAID的配置](#3.3 RAID的配置)
- 4、网络配置
如有侵权,请联系~
如有错误,也欢迎批评指正~
本篇文章大部分是来自学习《高性能MySQL》的笔记
1、影响MySQL性能的因素
磁盘空间大小、可用的内存以及CPU资源、网络等都会限制系统的性能。
- CPU饱和:这是最常见的瓶颈。当MySQL并行执行太多的查询或者少量的查询在CPU上运行时间太久,都会导致CPU饱和。
- IO饱和:这种比CPU耗尽的频率低得多,因为目前普遍使用固态硬盘
- 内存耗尽:如果企图分配太多的内存给MySQL的时候。
2、平衡内存和磁盘的资源
配置一个大的内存只是为了减少磁盘IO,提高相应,并不是将数据大量存储到内存中。综合考虑成本、速度等因素,平衡内存和磁盘的大小。数据的读写也都是先将数据保存到内存中或者是从内存中读取,然后异步的将内存中的数据刷新到磁盘【参考高性能MySQL-MySQL架构】。
只需要将工作集【你真正需要的数据】中的数据存储到内存中即可,不需要将所有的数据库数据都存储到内存中。
固态硬盘在2015年价格大幅度降低,所以目前大多数数据库的标配就是固态硬盘,除非是大规模的数据仓库系统或者是老旧的系统才会使用机械硬盘。
2.1 固态硬盘的垃圾回收
垃圾回收的目的是定期优化硬盘,确保硬盘高效运行并在整个生命周期内保持良好性能。与机械硬盘 (HDD) 不同,固态硬盘和其他 NAND 闪存无法覆盖现有数据。它们必须完成写入/擦除 (Program/Erase) 循环。闪存被分为块,块又被进一步分为页;数据在页级别被写入,在块级别被擦除。在数据可被擦除之前,原始块中的所有有效数据(页)必须首先被复制并写入到一个新块的空页中。要写入已被使用的数据块,固态硬盘控制器会先复制所有有效数据(仍在使用中的数据)并将其写入其他块的空白页,擦除当前块中的所有数据单元(有效数据和无效数据),然后开始将新数据写入刚刚擦除过的块。此过程称为垃圾回收。金士顿® 使用各种可利用专有技术执行垃圾回收 (GC)的 控制器,目的是保持尽可能多的空块,以便当固态硬盘必须写入数据时,不必等待块被擦除。
当可用空闲数据块变少,需要进行擦除操作的时候,速度会变慢。写入空闲磁盘需要几百微妙,但是擦除速度就慢很多,通常需要几毫秒。
3 磁盘配置
3.1 RAID性能优化
数据库一般都是使用RAID。RAID(冗余独立磁盘阵列,Redundant Array of Independent Disks)是一种将多个物理硬盘组合在一起以提高性能和冗余的存储技术。RAID 通过不同的配置和级别来实现数据冗余和访问速度的优化。
RAID工作原理:
RAID 通过将数据分散存储在多个硬盘上,以便提高性能和冗余。根据配置的不同,RAID 实现了以下功能:
- 数据条带化:将数据分割并分配到多个硬盘上,实现并行读写,提高速度。
- 数据镜像:在多个硬盘上创建相同的数据副本,提高冗余性。
- 奇偶校验:计算和存储数据的奇偶校验信息,以便在硬盘故障时恢复数据。
常见的 RAID 级别:
RAID 0(条带化):RAID 0 将数据条带化(striping),即将数据分割并分布到多个硬盘上。特点:
- 可以提高性能,数据在多个硬盘间分布,没有冗余;
- 如果其中一个硬盘故障,则所有数据丢失。
RAID 1(镜像):RAID 1 将数据完全复制到两个或多个硬盘上,形成镜像。特点:
- 性能:读取性能较高,因为可以从任一硬盘读取数据。
- 冗余:提供数据冗余,能够容忍一个硬盘故障,数据仍然安全。
存 - 存储效率:50%(存储容量为最小硬盘的容量)。
RAID 5(带奇偶校验的条带化):RAID 5 将数据和奇偶校验信息交替分布在所有硬盘上。特点:
- 性能:提供良好的读性能,写性能略低于 RAID 0 和 RAID 1。
- 冗余:能够容忍一个硬盘故障,数据可以通过奇偶校验信息恢复。
- 存储效率:计算方式为(N-1)/N,其中 N 是硬盘的总数。
RAID还有RAID6、RAID10、RAID50、RAID60等。现在数据库开始使用memblaze和shannon固态硬盘,性能更好。
3.2 RAID监控、故障、恢复
虽然RAID提供了冗余能力,但是同时多块磁盘出现故障的可能行仍然很大。所以,使用RAID仍然需要备份。使用RAID进行数据恢复的时间取决于RAID的级别、磁盘速度、队列大小等等。
如果磁盘存放的数据很少被访问,并且磁盘损坏了,直到尝试获取这部分数据的时候才发现,而如果别的磁盘也损坏了,那就可能无法恢复。因此,需要对RAID控制器、RAID阵列进行监控。
常见的 RAID 监控工具
- 硬件 RAID 控制器的监控软件
- Dell PERC(PowerEdge RAID Controller)管理工具:用于 Dell 服务器的 RAID 控制器,可以监控和管理 Dell RAID 阵列。
- HP Smart Array Configuration Utility:用于 HP 服务器的 RAID 控制器,提供监控和管理功能。
- LSI MegaRAID:用于 LSI/Avago/Silicon Image 控制器的工具,支持多种 RAID 类型的管理。
- 软件 RAID 管理工具
- mdadm(Linux):用于管理 Linux 软件 RAID 阵列的命令行工具,允许监控和配置 RAID 设备。
- Windows Storage Spaces:Windows 操作系统中的存储管理工具,可以监控和管理各种配置的磁盘,包括软件 RAID。
- 第三方 RAID 管理工具
- Array Management Software:如 Storage Manager、OpenManage等,这些工具可以提供更强大而集中的 RAID 阵列管理能力。
- Nagios、Zabbix 等开源监控工具:可以通过插件监控 RAID 阵列的状态并提供警告。
3.3 RAID的配置
**RAID条带块大小:**最佳的条带块大小取决于工作负载和硬件。条带块太小就无法避免读取过程中涉及到多个驱动器;如果条带块太大,缓存的效率可能就会降低,最终可能会读取比实际需要的数据要多,读取很多无用的数据。
RAID缓存: RAID缓存是物理安装在硬件RAID控制器上的内存。当数据在磁盘和主机系统之间传输时,RAID缓存可以用来缓存数据。功能:
- 缓存读操作。当控制器从磁盘中读取一些数据并将其发送给主机系统后,控制器就可以缓存这些数据;将来控制器能够满足未来对相同数据的请求,无需访问磁盘。这是最差的RAID缓存使用方式。因为操作系统和数据库服务器都有更大的缓存。如果其中一个命中缓存就不会使用RAID缓存,他们都命中不了缓存,RAID命中缓存的概率也很低。
- 缓存预读取数据。如果RAID控制器注意到都是顺序的数据请求,它可能会决定进行预读取,即读取它预测不久将需要的数据。
- 缓存写操作。RAID控制器可以将写操作缓冲到缓存中,然后合并多个写操作一起写到磁盘。
- 内部操作。RAID内部操作也需要一些内存。
RAID控制器的内存比较稀缺,所以应该理智使用。尽量不要用于读操作,用于缓存写操作可以提高IO性能。很多控制器可以选择如何分配内存。有多少可以用于缓存写操作,有多少用于缓存读操作。建议RAID0、RAID1和RAID10 100%用于缓存写操作;RAID5应该为内部操作保留一些控制器内存,因为需要计算奇偶校验。
4、网络配置
- 网络运行不正常。出现数据包丢失,这会导致性能出现下降
- DNS解析异常中断或者缓慢。如果使用的主机名是域名不是IP,MySQL客户端会根据MySQL服务器的域名查找IP,然后进行通信;MySQL服务器接收到请求会根据客户端的IP进行反向DNS解析【IP查找域名】,将得到的域名再鉴权【mysql.user表】。如果在进行反向DNS解析的时候,异常或者缓慢也会影响性能。可以通过启用skip-name-resolve,跳过反向DNS,这样也就不能在user表中使用域名进行鉴权。