mysql+使用swap_MySQL避免使用SWAP
當(dāng)物理內(nèi)存的數(shù)量不能容納數(shù)據(jù)的時候,os會把虛擬內(nèi)存中的數(shù)據(jù)寫到磁盤上,此時的交換對于運行在操作系統(tǒng)中的進(jìn)程是透明的。
交換對與MySQL性能有很大的影響,對于Innodb存儲引擎它對內(nèi)存中的數(shù)據(jù)鎖住全局互斥量,如果此時導(dǎo)致了磁盤的IO,那么所有的動作都會等到IO完成之后才能進(jìn)行。
我們可以通過vmstat 命令。檢查s1,s0攔的IO變化狀態(tài)。
如果完全禁止文件交換,極端情況下,系統(tǒng)核心強(qiáng)制進(jìn)行交換,這樣會降低os的性能。拷貝一個大文件,用mysqldump 導(dǎo)出一個很大的數(shù)據(jù)庫時,文件系統(tǒng)往往會向linux申請大量的內(nèi)存作為cache,此時MySQL 可能會耗盡內(nèi)存、崩潰,或者被操作系統(tǒng)強(qiáng)制殺掉。
可以通過下面的幾種方式進(jìn)行調(diào)整:
1、/proc/sys/vm/swappiness的內(nèi)容改成0(臨時),/etc/sysctl.conf上添加vm.swappiness=0(永久).這樣當(dāng)內(nèi)存比較緊張的時候數(shù)據(jù)值越低linux越傾向于使用物理內(nèi)存。
2、修改MySQL刷新磁盤的方法:
對于Innodb 存儲引擎,其自身可以進(jìn)行數(shù)據(jù)和索引的緩存的緩存管理我們可以考慮由Mysql自己的進(jìn)程來管理IO緩沖區(qū)保過緩存機(jī)制和寫延遲等,這樣也可以降低系統(tǒng)的開銷。可以使用raw 分區(qū)來實現(xiàn)(這樣的實例還不錯多)或者innodb_flush_method,開啟O_DIRECT模式。這種情況下,InnoDB的buffer pool會使用直接IO的方式繞過SWAP交換區(qū)來訪問磁盤,redo log依舊會使用swap,由于Redo log是覆寫模式的,所以需要空間較少。與O_DIRECT類似的一個選項是O_SYNC,后者只對寫數(shù)據(jù)有效。 3、添加MySQL的配置參數(shù)memlock 個人不推薦這個方式,這樣會把MySQL鎖定到內(nèi)存中,這樣雖然避免了交換,如果沒有足夠的內(nèi)存進(jìn)行鎖定,那么MySQL在試圖分配更多的內(nèi)存的時候就會崩潰,如果鎖定太多內(nèi)存,留給操作系統(tǒng)的內(nèi)存不足的話,同樣會有問題。
總結(jié)
以上是生活随笔為你收集整理的mysql+使用swap_MySQL避免使用SWAP的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python循环for...in_pyt
- 下一篇: linux cmake编译源码,linu