MySQL swap需要注意了

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的产生。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL可以通过一些优化措施来改善Swap(交换空间)的使用情况,以提高数据库的性能和响应能力。以下是一些MySQL Swap优化的常见方法: 1. 调整innodb_buffer_pool_size:innodb_buffer_pool_size是InnoDB存储引擎使用的内存缓冲池的大小。将其设置为足够大的值可以减少对磁盘的读写操作,从而减少对Swap的需求。 2. 避免过度分配内存:避免将系统内存分配给过多的进程和服务,以确保MySQL有足够的可用内存。如果系统内存不足,操作系统可能会将一部分内存交换到Swap中。 3. 监控Swap使用情况:定期监控Swap的使用情况,以及Swap的读写速度。如果发现Swap的使用频繁或读写速度较慢,可能需要进一步优化MySQL的配置或增加系统内存。 4. 避免频繁的内存分配和释放:频繁的内存分配和释放操作可能导致内存碎片化,增加对Swap的需求。可以通过调整MySQL的配置参数,如innodb_log_buffer_size和sort_buffer_size等,来减少内存分配和释放的频率。 5. 使用专用的Swap设备:如果可能,将Swap设备与数据库存储设备分开,以减少对数据库性能的影响。专用的Swap设备可以提供更好的IO性能,减少对数据库操作的干扰。 需要注意的是,在Swap优化时要综合考虑数据库的负载情况、系统内存大小和其他应用程序的需求。最佳的Swap优化策略可能因系统配置和环境而有所不同。因此,建议根据具体情况进行测试和调整,以找到最适合的优化方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值