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