MySQL伺服器Swap滿了100%導致db很慢很卡

mchdba發表於2013-03-12

MySQL伺服器Swap滿了100%導致db很慢很卡

DB伺服器會產生swap呢?假設我們的實體記憶體是12G,swap是3G。如果MySQL本身已經佔用了10G實體記憶體,而

同時其他應用程式或者系統程式又需要3G記憶體,這時候作業系統就可能把MySQL所擁有的一部分地址空間對映

到swap上去,有可能產生swap的操作事件:


產生的主要原因:
1 copy一個大檔案,比如上百G的backup包

2 正在mysqldump以及mysql import一個很大的庫的時候。

3 大批次的併發操作的io writer和io read操作。

通常的解決辦法:
1 修改swappiness的值:/proc/sys/vm/swappiness的內容改成0(臨時),/etc/sysctl.conf上新增

vm.swappiness=0(永久)這個引數:linux是傾向於使用swap,還是傾向於釋放檔案系統cache,在記憶體緊張

的時候,數值越低越傾向於釋放檔案系統cache,【】只能減少並不能避免使用swap

2 修改my.cnf裡面的innodb_flush_method引數,開啟O_DIRECT模式。
這種情況下,InnoDB的buffer pool會直接繞過檔案系統cache來訪問磁碟,但是redo log依舊會使用檔案系

統cache。值得注意的是,Redo log是覆寫模式的,即使使用了檔案系統的cache,也不會佔用太多。

3 新增MySQL的配置引數memlock
這個引數會強迫mysqld程式的地址空間一直被鎖定在實體記憶體上,對於os來說是非常霸道的一個要求。必須

要用root帳號來啟動MySQL才能生效

4 指定MySQL使用大頁記憶體(Large Page)。Linux上的大頁記憶體是不會被換出實體記憶體的,和memlock有異曲

同工之妙。

5 臨時釋放鎖佔據的swap

參考文章:https://

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26230597/viewspace-755801/,如需轉載,請註明出處,否則將追究法律責任。

相關文章