MySQL如何避免使用swap 原文: http://www.taobaodba.com/html/552_mysql_avoid_swap.html ? Linux有很多很好的內(nèi)存、IO調(diào)度機(jī)制,但是并不會(huì)適用于所有場(chǎng)景。對(duì)于DBA來說Linux比較讓人頭疼的一個(gè)地方是,它不會(huì)因?yàn)镸ySQL 很重要就避免將分配給MySQL的地址空
MySQL如何避免使用swap原文:
http://www.taobaodba.com/html/552_mysql_avoid_swap.html
?
Linux有很多很好的內(nèi)存、IO調(diào)度機(jī)制,但是并不會(huì)適用于所有場(chǎng)景。對(duì)于DBA來說Linux比較讓人頭疼的一個(gè)地方是,它不會(huì)因?yàn)镸ySQL 很重要就避免將分配給MySQL的地址空間映射到swap上。對(duì)于頻繁進(jìn)行讀寫操作的系統(tǒng)而言,數(shù)據(jù)看似在內(nèi)存而實(shí)際上在磁盤是非常糟糕的,響應(yīng)時(shí)間的增 長(zhǎng)很可能直接拖垮整個(gè)系統(tǒng)。這篇blog主要講講我們作為DBA,怎樣盡量避免MySQL慘遭swap的毒手。
首先我們要了解點(diǎn)基礎(chǔ)的東西,比如說為什么會(huì)產(chǎn)生swap。假設(shè)我們的物理內(nèi)存是16G,swap是4G。如果MySQL本身已經(jīng)占用了12G物理內(nèi)存, 而同時(shí)其他程序或者系統(tǒng)模塊又需要6G內(nèi)存,這時(shí)候操作系統(tǒng)就可能把MySQL所擁有的一部分地址空間映射到swap上去。
cp一個(gè)大文件,或用mysqldump導(dǎo)出一個(gè)很大的數(shù)據(jù)庫的時(shí)候,文件系統(tǒng)往往會(huì)向Linux申請(qǐng)大量的內(nèi)存作為cache,一不小心就會(huì)導(dǎo)致L使用swap。這個(gè)情景比較常見,以下是最簡(jiǎn)單的三個(gè)調(diào)整方法:
1、/proc/sys/vm/swappiness的內(nèi)容改成0(臨時(shí)),/etc/sysctl.conf上添加vm.swappiness=0(永久)
這個(gè)參數(shù)決定了Linux是傾向于使用swap,還是傾向于釋放文件系統(tǒng)cache。在內(nèi)存緊張的情況下,數(shù)值越低越傾向于釋放文件系統(tǒng)cache。
當(dāng)然,這個(gè)參數(shù)只能減少使用swap的概率,并不能避免Linux使用swap。
2、修改MySQL的配置參數(shù)innodb_flush_method,開啟O_DIRECT模式。
這種情況下,InnoDB的buffer pool會(huì)直接繞過文件系統(tǒng)cache來訪問磁盤,但是redo log依舊會(huì)使用文件系統(tǒng)cache。值得注意的是,Redo log是覆寫模式的,即使使用了文件系統(tǒng)的cache,也不會(huì)占用太多。
3、添加MySQL的配置參數(shù)memlock
這個(gè)參數(shù)會(huì)強(qiáng)迫mysqld進(jìn)程的地址空間一直被鎖定在物理內(nèi)存上,對(duì)于os來說是非常霸道的一個(gè)要求。必須要用root帳號(hào)來啟動(dòng)MySQL才能生效。
還有一個(gè)比較復(fù)雜的方法,指定MySQL使用大頁內(nèi)存(Large Page)。Linux上的大頁內(nèi)存是不會(huì)被換出物理內(nèi)存的,和memlock有異曲同工之妙。具體的配置方法可以參 考:http://harrison-fisk.blogspot.com/2009/01/enabling-innodb-large-pages- on-linux.html
?
更多參考:http://robbin.iteye.com/blog/461382
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com