本文整理了一些MySQL的通用優(yōu)化方法,做個(gè)簡(jiǎn)單的總結(jié)分享,旨在幫助那些沒有專職MySQL DBA的企業(yè)做好基本的優(yōu)化工作,至于具體的SQL優(yōu)化,大部分通過加適當(dāng)?shù)乃饕纯蛇_(dá)到效果,更復(fù)雜的就需要具體分析了,可以參考本站的一些優(yōu)化案例或者聯(lián)系我們
1、硬件層相關(guān)優(yōu)化
1.1、CPU相關(guān)
在服務(wù)器的BIOS設(shè)置中,可調(diào)整下面的幾個(gè)配置,目的是發(fā)揮CPU最大性能,或者避免經(jīng)典的NUMA問題:
1、選擇Performance Per Watt Optimized(DAPC)模式,發(fā)揮CPU最大性能,跑DB這種通常需要高運(yùn)算量的服務(wù)就不要考慮節(jié)電了;
2、關(guān)閉C1E和C States等選項(xiàng),目的也是為了提升CPU效率;
3、Memory Frequency(內(nèi)存頻率)選擇Maximum Performance(最佳性能);
4、內(nèi)存設(shè)置菜單中,啟用Node Interleaving,避免NUMA問題;
1.2、磁盤I/O相關(guān)
下面幾個(gè)是按照IOPS性能提升的幅度排序,對(duì)于磁盤I/O可優(yōu)化的一些措施:
1、使用SSD或者PCIe SSD設(shè)備,至少獲得數(shù)百倍甚至萬倍的IOPS提升;
2、購置陣列卡同時(shí)配備CACHE及BBU模塊,可明顯提升IOPS(主要是指機(jī)械盤,SSD或PCIe SSD除外。同時(shí)需要定期檢查CACHE及BBU模塊的健康狀況,確保意外時(shí)不至于丟失數(shù)據(jù));
3、有陣列卡時(shí),設(shè)置陣列寫策略為WB,甚至FORCE WB(若有雙電保護(hù),或?qū)?shù)據(jù)安全性要求不是特別高的話),嚴(yán)禁使用WT策略。并且閉陣列預(yù)讀策略,基本上是雞肋,用處不大;
4、盡可能選用RAID-10,而非RAID-5;
5、使用機(jī)械盤的話,盡可能選擇高轉(zhuǎn)速的,例如選用15KRPM,而不是7.2KRPM的盤,不差幾個(gè)錢的;
2、系統(tǒng)層相關(guān)優(yōu)化
2.1、文件系統(tǒng)層優(yōu)化
在文件系統(tǒng)層,下面幾個(gè)措施可明顯提升IOPS性能:
1、使用deadline/noop這兩種I/O調(diào)度器,千萬別用cfq(它不適合跑DB類服務(wù));
2、使用xfs文件系統(tǒng),千萬別用ext3;ext4勉強(qiáng)可用,但業(yè)務(wù)量很大的話,則一定要用xfs;
3、文件系統(tǒng)mount參數(shù)中增加:noatime, nodiratime, nobarrier幾個(gè)選項(xiàng)(nobarrier是xfs文件系統(tǒng)特有的);
2.2、其他內(nèi)核參數(shù)優(yōu)化
針對(duì)關(guān)鍵內(nèi)核參數(shù)設(shè)定合適的值,目的是為了減少swap的傾向,并且讓內(nèi)存和磁盤I/O不會(huì)出現(xiàn)大幅波動(dòng),導(dǎo)致瞬間波峰負(fù)載:
1、將vm.swappiness設(shè)置為5-10左右即可,甚至設(shè)置為0(RHEL 7以上則慎重設(shè)置為0,除非你允許OOM kill發(fā)生),以降低使用SWAP的機(jī)會(huì);
2、將vm.dirty_background_ratio設(shè)置為5-10,將vm.dirty_ratio設(shè)置為它的兩倍左右,以確保能持續(xù)將臟數(shù)據(jù)刷新到磁盤,避免瞬間I/O寫,產(chǎn)生嚴(yán)重等待(和MySQL中的innodb_max_dirty_pages_pct類似);
新聞熱點(diǎn)
疑難解答
圖片精選