比較全面的MySQL優化參考(上篇)
本文整理了一些MySQL的通用優化方法,做個簡單的總結分享,旨在幫助那些沒有專職MySQL DBA的企業做好基本的優化工作,至于具體的SQL優化,大部分通過加適當的索引即可達到效果,更復雜的就需要具體分析了,可以參考本站的一些優化案例或者聯系我,下方有我的聯系方式。這是上篇。
1、硬件層相關優化
1.1、CPU相關
在服務器的BIOS設置中,可調整下面的幾個配置,目的是發揮CPU最大性能,或者避免經典的NUMA問題:
1、選擇Performance Per Watt Optimized(DAPC)模式,發揮CPU最大性能,跑DB這種通常需要高運算量的服務就不要考慮節電了; 2、關閉C1E和C States等選項,目的也是為了提升CPU效率; 3、Memory Frequency(內存頻率)選擇Maximum Performance(最佳性能);4、內存設置菜單中,啟用Node Interleaving,避免NUMA問題;</pre>
1.2、磁盤I/O相關
下面幾個是按照IOPS性能提升的幅度排序,對于磁盤I/O可優化的一些措施:
1、使用SSD或者PCIe SSD設備,至少獲得數百倍甚至萬倍的IOPS提升; 2、購置陣列卡同時配備CACHE及BBU模塊,可明顯提升IOPS(主要是指機械盤,SSD或PCIe SSD除外。同時需要定期檢查CACHE及BBU模塊的健康狀況,確保意外時不至于丟失數據);3、有陣列卡時,設置陣列寫策略為WB,甚至FORCE WB(若有雙電保護,或對數據安全性要求不是特別高的話),嚴禁使用WT策略。并且閉陣列預讀策略,基本上是雞肋,用處不大;
4、盡可能選用RAID-10,而非RAID-5;
5、使用機械盤的話,盡可能選擇高轉速的,例如選用15KRPM,而不是7.2KRPM的盤,不差幾個錢的;</pre>
2、系統層相關優化
2.1、文件系統層優化
在文件系統層,下面幾個措施可明顯提升IOPS性能:
1、使用deadline/noop這兩種I/O調度器,千萬別用cfq(它不適合跑DB類服務); 2、使用xfs文件系統,千萬別用ext3;ext4勉強可用,但業務量很大的話,則一定要用xfs;3、文件系統mount參數中增加:noatime, nodiratime, nobarrier幾個選項(nobarrier是xfs文件系統特有的);</pre>
2.2、其他內核參數優化
針對關鍵內核參數設定合適的值,目的是為了減少swap的傾向,并且讓內存和磁盤I/O不會出現大幅波動,導致瞬間波峰負載:
1、將vm.swappiness設置為5-10左右即可,甚至設置為0(RHEL 7以上則慎重設置為0,除非你允許OOM kill發生),以降低使用SWAP的機會; 2、將vm.dirty_background_ratio設置為5-10,將vm.dirty_ratio設置為它的兩倍左右,以確保能持續將臟數據刷新到磁盤,避免瞬間I/O寫,產生嚴重等待(和MySQL中的innodb_max_dirty_pages_pct類似);3、將net.ipv4.tcp_tw_recycle、net.ipv4.tcp_tw_reuse都設置為1,減少TIME_WAIT,提高TCP效率;
4、至于網傳的read_ahead_kb、nr_requests這兩個參數,我經過測試后,發現對讀寫混合為主的OLTP環境影響并不大(應該是對讀敏感的場景更有效果),不過沒準是我測試方法有問題,可自行斟酌是否調整;</pre>來自:http://imysql.com/2015/05/24/mysql-optimization-reference-1.shtml