您好,欢迎访问一九零五行业门户网

MySQL如何处理使用swap

mysql如何避免使用swap 原文: http://www.taobaodba.com/html/552_mysql_avoid_swap.html ? linux有很多很好的内存、io调度机制,但是并不会适用于所有场景。对于dba来说linux比较让人头疼的一个地方是,它不会因为mysql 很重要就避免将分配给mysql的地址空
mysql如何避免使用swap
原文:
http://www.taobaodba.com/html/552_mysql_avoid_swap.html
?
linux有很多很好的内存、io调度机制,但是并不会适用于所有场景。对于dba来说linux比较让人头疼的一个地方是,它不会因为mysql 很重要就避免将分配给mysql的地址空间映射到swap上。对于频繁进行读写操作的系统而言,数据看似在内存而实际上在磁盘是非常糟糕的,响应时间的增 长很可能直接拖垮整个系统。这篇blog主要讲讲我们作为dba,怎样尽量避免mysql惨遭swap的毒手。
首先我们要了解点基础的东西,比如说为什么会产生swap。假设我们的物理内存是16g,swap是4g。如果mysql本身已经占用了12g物理内存, 而同时其他程序或者系统模块又需要6g内存,这时候操作系统就可能把mysql所拥有的一部分地址空间映射到swap上去。
cp一个大文件,或用mysqldump导出一个很大的数据库的时候,文件系统往往会向linux申请大量的内存作为cache,一不小心就会导致l使用swap。这个情景比较常见,以下是最简单的三个调整方法:
1、/proc/sys/vm/swappiness的内容改成0(临时),/etc/sysctl.conf上添加vm.swappiness=0(永久)
这个参数决定了linux是倾向于使用swap,还是倾向于释放文件系统cache。在内存紧张的情况下,数值越低越倾向于释放文件系统cache。
当然,这个参数只能减少使用swap的概率,并不能避免linux使用swap。
2、修改mysql的配置参数innodb_flush_method,开启o_direct模式。
这种情况下,innodb的buffer pool会直接绕过文件系统cache来访问磁盘,但是redo log依旧会使用文件系统cache。值得注意的是,redo log是覆写模式的,即使使用了文件系统的cache,也不会占用太多。
3、添加mysql的配置参数memlock
这个参数会强迫mysqld进程的地址空间一直被锁定在物理内存上,对于os来说是非常霸道的一个要求。必须要用root帐号来启动mysql才能生效。
还有一个比较复杂的方法,指定mysql使用大页内存(large page)。linux上的大页内存是不会被换出物理内存的,和memlock有异曲同工之妙。具体的配置方法可以参 考:http://harrison-fisk.blogspot.com/2009/01/enabling-innodb-large-pages- on-linux.html
?
更多参考:http://robbin.iteye.com/blog/461382
其它类似信息

推荐信息