本文整理了一些MySQL的通用優(yōu)化方法,做個(gè)簡(jiǎn)單的總結(jié)分享,旨在幫助那些沒有專職MySQL DBA的企業(yè)做好基本的優(yōu)化工作,至于具體的SQL優(yōu)化,大部分通過加適當(dāng)?shù)乃饕纯蛇_(dá)到效果,更復(fù)雜的就需要具體分析了,可以參考本站的一些優(yōu)化案例或者聯(lián)系我,下方有我的聯(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類似); 3、將net.ipv4.tcp_tw_recycle、net.ipv4.tcp_tw_reuse都設(shè)置為1,減少TIME_WAIT,提高TCP效率; 4、至于網(wǎng)傳的read_ahead_kb、nr_requests這兩個(gè)參數(shù),我經(jīng)過測(cè)試后,發(fā)現(xiàn)對(duì)讀寫混合為主的OLTP環(huán)境影響并不大(應(yīng)該是對(duì)讀敏感的場(chǎng)景更有效果),不過沒準(zhǔn)是我測(cè)試方法有問題,可自行斟酌是否調(diào)整; 后記:本文根據(jù)個(gè)人多年經(jīng)驗(yàn)總結(jié),個(gè)別建議可能有不完善之處,歡迎留言或者加我 微信公眾號(hào): MySQL中文網(wǎng) 、QQ: 4700963 相互探討交流。 附錄:延伸閱讀1、 常用PC服務(wù)器陣列卡、硬盤健康監(jiān)控 2、 PC服務(wù)器陣列卡管理簡(jiǎn)易手冊(cè) 3、 實(shí)測(cè)Raid5 VS Raid1+0下的innodb性能 4、 SAS vs SSD各種模式下MySQL TPCC OLTP對(duì)比測(cè)試結(jié)果 5、 MySQL出了門,Percona在左,MariaDB在右 6、 Percona Thread Pool性能基準(zhǔn)測(cè)試 7、 [MySQL優(yōu)化案例]系列 — 分頁優(yōu)化 更多相關(guān)優(yōu)化案例,可在 百度 或谷歌 中根據(jù)關(guān)鍵字搜索本站。 |
|