本篇文章为大家分享一下Linux系统中MySQL优化小技巧,本文实操记录绝无水文,如果错误或遗漏欢迎各位小伙伴指正。
1.禁止操作系统更新文件的atime属性
atime是Linux/UNIX系统下的一个文件属性,每当读取文件时,操作系统都会将读操作时间回写到磁盘上。对于读写频繁的数据库文件来说,记录文件的访问时间一般没有任何用处,却会增加磁盘系统的负担,影响I/O性能!因此,可以通过设置文件系统的mount熟悉,阻止操作系统写atime信息,减轻磁盘I/O负担。方法如下:
(1)修改文件系统配置文件/etc/fstab,指定noatime选项:
UUID=33958004-e8a7-4135-844f-707a5537e86a /data ext4 noatime 0 1
(2)重新mount文件系统使其修改生效:
[root@MySQL-01 ~]# mount -o remount /data
2.调整I/O调度算法
详细说明请参考前面文章提到的I/O调度算法的选择
(1)查看当前系统支持的I/O调度算法:
[root@MySQL-01 ~]# dmesg | grep -i scheduler
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
[root@MySQL-01 ~]#
(2)查看当前设备(/dev/sda)使用的I/O调度算法:
[root@MySQL-01 ~]# cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]
[root@MySQL-01 ~]#
(3)修改当前设备使用的I/O调度算法,普通磁盘可以选择Deadline,SSD我们可以选择使用NOOP或者Deadline
[root@MySQL-01 ~]# echo "deadline" >> /sys/block/sda/queue/scheduler
[root@MySQL-01 ~]# cat /sys/block/sda/queue/scheduler
noop anticipatory [deadline] cfq
[root@MySQL-01 ~]#
永久修改I/O调度算法,可以通过修改内核引导参数,增加elevator=调度算法名
[root@MySQL-01 ~]# vim /boot/grub/menu.lst
更改后的内容:
[root@MySQL-01 ~]# grep "deadline" /boot/grub/menu.lst
kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=UUID=c0618639-a967-4601-bca7-cc3b99c5c332 elevator=deadline rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
[root@MySQL-01 ~]#
3.NUMA架构优化
从系统架构来看,目前的商用服务器大体可以分为三类:
(1)对称多处理器架构(Symmetric Multi-Processor,SMP)
(2)非一致存储访问架构(Non-Uniform Memory Access,NUMA)
(3)海量并行处理架构(Massive Parallel Processing,MPP)
一般服务器是SMP或者NUMA架构的较多。我这里只详细说明NUMA架构,至于其他的童鞋们可以自行查阅资料_
NUMA把一台计算机分成多个节点(Node),每个节点内部拥有多个CPU,节点内部使用共有的内存控制器,节点之间是通过互联模块进行连接和信息交互,因此节点的所有内存对于本节点所有的CPU是等同的,而对于其他节点中的所有CPU都是不同的。因此每个CPU可以访问整个系统内存,但是访问本地节点的内存速度最快(不需要经过互联模块),访问非本地节点的内存速度较慢(需要经过互联模块),即CPU访问内存的速度与节点的距离有关,距离称为Node Distance。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。