一、IO调度算法
IO是"Input/Output" 的缩写,指的是计算机系统中输入和输出的操作,在磁盘或者其他块设备的读取和写入操作。
1、CFQ(Completely Fair Queuing,完全公平排队)
其主要目的是在多个进程竞争磁盘I/O时实现公平性,确保每个进程都能获得合理的I/O带宽。不太适用于MySQL
2、Deadline
Deadline调度算法是一种以截止时间为驱动的IO调度策略,它通过分类管理读写请求和保证请求在一定时间内被服务,来优化IO性能,特别是在需要保证IO请求及时性的场合。
适用场景对实时性比较高的应用,MySQL推荐使用Deadline算法
3、NOOP算法
NOOP算法非常简单,它不进行任何复杂的调度操作,只是将IO请求放入队列中,然后按顺序执行。适用于低延迟要求的场景
二、IO调度算法的查看和修改
1、查看IO调度算法
dmesg |grep -i scheduler
[root@localhost ~]# dmesg |grep -i scheduler [ 1.779288] io scheduler noop registered [ 1.779291] io scheduler deadline registered (default) [ 1.779312] io scheduler cfq registered [ 1.779313] io scheduler mq-deadline registered [ 1.779315] io scheduler kyber registered
查看当前设备使用的IO调度算法
cat /sys/block/sda/queue/scheduler
[root@localhost ~]# cat /sys/block/sda/queue/scheduler noop [deadline] cfq
2、临时修改IO调度算法
echo cfq > /sys/block/sda/queue/scheduler
[root@localhost ~]# echo cfq > /sys/block/sda/queue/scheduler [root@localhost ~]# cat /sys/block/sda/queue/scheduler noop deadline [cfq]
3、永久修改IO调度算法
grubby --update-kernel=ALL --args="elevator=deadline"
三、文件句柄数
每个打开的文件都有一个唯一的文件句柄,即使多个程序打开同一个文件,每个程序都会有自己的文件句柄。程序通过文件句柄来指定要进行读写操作的具体文件。
1、ulimit
查看文件句柄的具体限制ulimit -n
临时修改
ulimit -n 65534
永久修改
vim /etc/security/limits.conf 在该文件中加入 * soft nofile 65535 * hard nofile 65535
2、file-max
cat /proc/sys/fs/file-max
修改file-max参数
vim /etc/sysctl.conf #加入 fs.file-max = 655350 #生效 sysctl -p
四、交换空间使用控制
1、swap是什么?
Swap(交换空间)是 Linux 和其他类 Unix 操作系统中的一种虚拟内存技术。它允许系统在物理内存(RAM)不足以容纳当前所有活跃进程时,将一部分内存中的数据暂时存储到硬盘上,从而释放物理内存以供其他进程使用。Swap 空间通常位于硬盘上,可以是专用的分区,也可以是文件。
2、控制swap使用的偏好
MySQL尽量不要使用过高的swap空间,但是也不要设置为0
sysctl vm.swappiness
如果要重启也生效的话
vim /etc/sysctl.conf #加入 vm.swappiness=10
四、系统内存中脏页的最大百分比控制
1、控制的参数
sysctl vm.dirty_ratio
修改参数
sysctl vm.dirty_ratio=5
对于MySQL建议设置成5-20,较低的值可以减少脏页堆积,避免系统在高负载时因同步写入磁盘而阻塞。