Swappiness
首先要看的是交换性设置。这将确定内核换出内存页面的趋势。在某些情况下,您可能希望将其设置为“ 1”,以使交换最小。值为“ 0”将完全禁用它。
您可以使用以下命令确定当前值:
cat /proc/sys/vm/swappiness
如果未将其设置为“ 1”,则应考虑使用以下选项之一进行更改:
# Make sure you are root and set swappiness to 1
echo 1 > /proc/sys/vm/swappiness
# Or, you can use sysctl to do the same sysctl
vm.swappiness vm.swappiness = 1
如果更改有帮助,您将希望通过在/etc/sysctl.conf中进行更改将其永久化:
vm.swappiness = 1
I / O调度程序
许多系统的默认设置为“空转”或“最后期限”。在几乎所有情况下,“空打”比“最后期限”,“ cfq”或“预期”更有效。要检查I / O Scheduler的当前值,请发出以下命令:
cat /sys/block/sdb/queue/scheduler
如果要使用“ noop”测试性能,请尝试以下命令:
sudo echo noop > /sys/block/sdb/queue/scheduler
如果要永久保留更改,则需要在GRUB配置文件中执行以下操作:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"
CPU调速器
大多数现代处理器都可以在许多不同的时钟频率和电压配置下运行。这些被称为操作性能点或P状态。通常,时钟频率越高,电压越高,随着时间的推移,CPU可以执行的指令越多。同样,时钟频率和电压越高,消耗的能量越多。因此,在CPU容量和处理器消耗的功率之间要进行权衡。
您可以通过以下命令检查正在使用的驱动程序和调控器:
cpupower frequency-info
...
driver: acpi-cpufreq
...
available cpufreq governors: conservative, ondemand, userspace, powersave, performance
...
The governor "ondemand" may decide which speed to use within this range.
...
在上面,您可以看到驱动程序为“ acpi-cpufreq”,并且调节器设置为“ ondemand”。
您还可以通过发出以下命令来检查调控器设置:
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
如果可以选择“性能”,则可以通过发出以下命令进行更改:
echo "performance" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
当然,您将要确定这是否对性能有所帮助,因此测试至关重要。
NUMA
NUMA代表“非统一内存访问”。使用NUMA,SMP的系统处理器可以比非本地内存更快地访问其自己的本地内存。这可能会导致交换,从而对数据库性能产生负面影响。当分配给InnoDB缓冲池的内存大于可用RAM的数量并且选择了默认内存分配策略时,很可能会发生交换。启用NUMA的服务器将报告CPU节点之间的不同节点距离。
您可以使用以下方法确定设置:
numactl --hardware
每当numactl在节点之间显示不同距离时,应启用MySQL变量innodb_numa_interleave以确保内存交错。使用Percona Server,可以通过使用flush_caches变量来改善对NUMA的支持。这将有助于跨节点分配公平。要确定节点之间的分配是否相等,可以使用以下脚本检查numa_maps:https : //github.com/sonots/bin/blob/master/numa-maps-summary.pl
结论
通常情况下,在生产之前,应始终测试在较低环境中所做的任何更改。工作负载是如此不同,您必须查看所有更改如何影响您的系统。
文章来源:https://www.percona.com/blog/2020/07/06/mysql-101-linux-tuning-for-mysql/




