Swap memory是作業系統在實體記憶體不夠的時候使用磁盤儲存一部分虛拟記憶體空間,具體哪部分記憶體被交換到磁盤對于應用程式來說是完全不知道的,是以一旦MySQL所使用的記憶體空間被交換到磁盤,會嚴重影響MySQL的性能.
在GNU/Linux作業系統,你可以通過vmstat察看是否有Swap Memory 在被使用.
如果發現作業系統已經開始使用Swap Memory,建議以下兩種方法來解決:
1 Linux作業系統可以通過配置檔案/proc/sys/vm/swappiness來調節作業系統使用Swap Memory的程度,在這個檔案中儲存的是一個數字,預設60, 值越小則作業系統會盡可能不使用Swap Memory.可以将值設為0,這樣作業系統知會在迫不得已的情況下才使用Swap Memory.
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuIXY0N3Xu92Yp9CXzV2Zh1WavwVbvNmLllXZ0lmLn5WZw1iclZXas92Lc9CX6MHc0RHaiojIsJye.png)
$cat /proc/sys/vm/swappiness
60
$echo 0 > /proc/sys/vm/swappiness
為了能夠讓這個配置在系統重新開機之後繼續生效,需要修改/etc/sysctl.conf加入vm.swappiness=0
2 對于InnoDB引擎,可以添加配置:
innodb_flush_method=O_DIRECT
來實作直接I/O讀寫.這樣作業系統就不需要不斷增加磁盤緩沖,避免使用Swap Memory
另外MySQL還有一個參數memlock能夠強制MySQL隻使用實體記憶體.但風險是如果真的沒有記憶體會導緻MySQL強制退出.
http://oliver-peng.iteye.com/blog/543693
本文轉自 liang3391 51CTO部落格,原文連結:http://blog.51cto.com/liang3391/732163