加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL中如何避免使用SWAP

发布时间:2016-09-26 02:36:02 所属栏目:MySql教程 来源:站长网
导读:当物理内存的数量不能容纳数据的时候,os会把虚拟内存中的数据写到磁盘上,此时的交换对于运行在操作系统中的进程是透明的。 交换对与MySQL性能有很大的影响,对于Innodb存储引擎它对内存中的数据锁住全局互斥量,如果此时导致了磁盘的IO,那么所有的动作

当物理内存的数量不能容纳数据的时候,os会把虚拟内存中的数据写到磁盘上,此时的交换对于运行在操作系统中的进程是透明的。

交换对与MySQL性能有很大的影响,对于Innodb存储引擎它对内存中的数据锁住全局互斥量,如果此时导致了磁盘的IO,那么所有的动作都会等到IO完成之后才能进行。

我们可以通过vmstat 命令。检查s1,s0拦的IO变化状态。

如果完全禁止文件交换,极端情况下,系统核心强制进行交换,这样会降低os的性能。拷贝一个大文件,用mysqldump 导出一个很大的数据库时,文件系统往往会向linux申请大量的内存作为cache,此时MySQL 可能会耗尽内存、崩溃,或者被操作系统强制杀掉。

可以通过下面的几种方式进行调整:

1、/proc/sys/vm/swappiness的内容改成0(临时),/etc/sysctl.conf上添加vm.swappiness=0(永久).这样当内存比较紧张的时候数据值越低linux越倾向于使用物理内存。

2、修改MySQL刷新磁盘的方法:

对于Innodb 存储引擎,其自身可以进行数据和索引的缓存的缓存管理我们可以考虑由Mysql自己的进程来管理IO缓冲区保过缓存机制和写延迟等,这样也可以降低系统的开销。可以使用raw 分区来实现(这样的实例还不错多)或者innodb_flush_method,开启O_DIRECT模式。这种情况下,InnoDB的buffer pool会使用直接IO的方式绕过SWAP交换区来访问磁盘,redo log依旧会使用swap,由于Redo log是覆写模式的,所以需要空间较少。与O_DIRECT类似的一个选项是O_SYNC,后者只对写数据有效。

3、添加MySQL的配置参数memlock

个人不推荐这个方式,这样会把MySQL锁定到内存中,这样虽然避免了交换,如果没有足够的内存进行锁定,那么MySQL在试图分配更多的内存的时候就会崩溃,如果锁定太多内存,留给操作系统的内存不足的话,同样会有问题。

本栏目更多精彩内容:http://www.bianceng.cn/database/MySQL/

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读