MySQL运行环境中,当发现系统已经用到了swap,该怎么处理?
一般来说,发生swap的原因是系统认为内存不够了。
那么,当物理内存真的不够了,或者著名的NUMA都是引起swap的可能原因。通常的应对方法有几种:
1、通过BIOS、系统内核参数关闭NUMA,或者在mysqld启动时,利用numactl关闭NUMA的使用
2、调低系统使用swap的权重,设置内核参数 vm.swappiness 不高于10
3、Linux下使用free命令查看内存使用情况,确认是否发生了内存泄露,可以去微信公众号「老叶茶馆」中发送“OOM”
4、修改MySQL参数innodb_flush_method = O_DIRECT,这样InnoDB在读写物理数据的时候会绕过cache来访问磁盘
5、优化SQL效率,避免产生额外的分组、排序、临时表情况发生,参考文章:http://t.cn/EwLIuFv
6、在【夜间或业务不繁忙】时适合执行 swapoff -a,并执行sync刷新操作系统内存脏页到硬盘