MySQL应不应该开swap

这其实是个老问题了,只是昨天和同事说起来的时候,稍稍争执了一番。
正常来说,一个Linux主机应该打开swap并且是内存的二倍。但是凡事应该具体问题具体对待,时代在变化,软硬件都有了不少的变化。在一个64G内存的机器上你还会用128G的swap?
Peter Zaitsev在08年写的一篇blog: Should you have your swap file enabled while running MySQL?,里面提到了一个标准:如果你宁可加内存,也不让系统变慢,那就关掉swap。如果你不介意内存耗尽系统变慢,那就开着swap。Peter也提到了一个情况是kernel在没有swap的时候会工作异常,这也被Don MacAskill的评论证实了,Don的做法是用Memdisk上建立了一个32M大小的swap来避免。
就我自己来讲,Don的做法比较好。另外也要注意不同的应用有不同的策略,如果应用对数据的完整性要求较高,例如支付系统,事务系统,还是要开启swap的来避免kernel panic和OOM-killer。如果只是在线系统,数据有多份冗余,且允许一定的数据损失(大部分的互联网应用都属这一范围),相反的性能的要求很高,那就把swap设置的低一些,调整swapiness到10左右。
这里还有一个问题是你相信kernel能管好memory cache,swap out正确的数据?还是不能?
参考:

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.