MySQL swap需要注意了

本文探讨了Linux系统中Swap的使用策略及其对数据库性能的影响,包括调整内核参数、MySQL配置优化、监控方法等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1.swap 说明
操作系统设置swap的目的:
程序运行的一个必要条件就是足够的内存,而内存往往是系统里面比较紧张的一种资源。为了满足更多程序的要求,操作系统虚拟了一部分内存地址,并将之映射到swap上。对于程序来说,它只知道操作系统给自己分配了内存地址,但并不清楚这些内存地址到底映射到物理内存还是swap。物理内存和swap在功能上是一样的,只是因为物理存储元件的不同(内存和磁盘),性能上有很大的差别。操作系统会根据程序使用内存的特点进行换入和换出,尽可能地把物理内存留给最需要它的程序。但是这种调度是按照预先设定的某种规则的,并不能完全符合程序的需要。比如MySQL

1.2.虚拟内存使用策略
改系统内核参数/proc/sys/vm/swappiness。调整系统使用swap分区的倾向性,数值越低越倾向于释放文件系统的cache,不能避免Linux系统使用swap分区。swappiness=0表示最大限度使用物理内存,然后才是swap分区。swappiness=100(0~100)表示积极使用swap分区,并且将内存上的数据及时的映射到swap分区上。
最大化限制虚拟内存的使用,以提高mysql对内存的使用效率。
/etc/sysctl.conf配置示例如下:(/proc/sys/vm/swappiness的内容改成10(临时))

vm.swappiness=10
#echo 0 > /proc/sys/vm/swappiness

所有开源数据库都适应。

1.3.对于mysql
1)mysql在在内存高度紧张的时候,数据在内存中保持锁定并且防止可能被swapping out
mysql配置参数memlock,将mysql锁定在内存重防止被swapping out。这个参数会强迫mysqld进程的地址空间一直被锁定在物理内存上

#vim /etc/my.cnf
[mysqld]
memlock

2)改MySQL参数innodb_flush_method,开启O_DIRECT模式。Innodb的buffer pool会直接绕过文件系统cache来访问磁盘,但是redo log依旧会使用文件系统cache。Redo Log是覆写模式的,即使使用了文件系统的cache也不会占用太多

#vim /etc/my.cnf
[mysqld]
innodb_flush_method=O_DIRECT

3)合理的配置mysql内存
全局的内存消耗:例如:innodb_buffer_pool_size:
会话级别的内存消耗:read_buffer_size, sort_buffer_size, read_rnd_buffer_size, tmp_table_size

1.4.其他开源数据库
建议设置内存使用限制:
如redis:

#vim redis.cnf
maxmemory 162144kb

Mongodb:

#vim mongod.cnf
storage:
   dbPath: /opt/mongodb/shard1/
   directoryPerDB: true
   wiredTiger:
    engineConfig:
      configString : cache_size=128M

1.5.刷新swap缓存
如出现swap现象,没关找到确切的原理,可以清楚swap 进行观察。
利用swapoff和swapon刷新swap缓存
有时运行大量的进程后swap大量占用,达到30%的话机器会变得很慢
可以用以下两个命令清除刷新swap

#swapoff -a
#swapon -a

swap就还原到初始状态

1.6.操作系统swap分配
1)Linux下可以创建两种类型的交换空间,一种是swap分区,一种是swap文件。前者适合有空闲的分区可以使用,后者适合于没有空的硬盘分区,硬盘的空间都已经分配完毕。
2)交换分区(swap)的合理值一般在内存的2 倍左右,可以适当加大。实际上具体还是以实际应用为准。
在Linux系统,我们可以参照Redhat公司为RHEL推荐的SWAP空间的大小划分原则,在你没有其他特别需求时,可以作为很好的参考依据。
内存小于4GB时,推荐不少于2GB的swap空间;
内存4GB~16GB,推荐不少于4GB的swap空间;
内存16GB~64GB,推荐不少于8GB的swap空间;
内存64GB~256GB,推荐不少于16GB的swap空间。
image.png
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/deployment_guide/ch-swapspace

1.7.监控
日常监控swap的值进行有效的管理。

补充:
有些案例发现系统还有大量剩余空间的情况下,已经使用了swap。这正是NUMA架构导致的。NUMA架构下每个Node都有本地的内存空间,Node间内存使用不均衡,当某个Node的内存不足时,就可能导致swap的产生。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值