|
在進行MySQL的優(yōu)化之前,必須要了解的就是MySQL的查詢過程,很多查詢優(yōu)化工作實際上就是遵循一些原則,讓MySQL的優(yōu)化器能夠按照預想的合理方式運行而已。 圖-MySQL查詢過程 1.優(yōu)化的哲學注:優(yōu)化有風險,涉足需謹慎 a.優(yōu)化可能帶來的問題? · 優(yōu)化不總是對一個單純的環(huán)境進行,還很可能是一個復雜的已投產的系統(tǒng); · 優(yōu)化手段本來就有很大的風險,只不過你沒能力意識到和預見到; · 任何的技術可以解決一個問題,但必然存在帶來一個問題的風險; · 對于優(yōu)化來說解決問題而帶來的問題,控制在可接受的范圍內才是有成果; · 保持現狀或出現更差的情況都是失敗! b.優(yōu)化的需求? · 穩(wěn)定性和業(yè)務可持續(xù)性,通常比性能更重要; · 優(yōu)化不可避免涉及到變更,變更就有風險; · 優(yōu)化使性能變好,維持和變差是等概率事件; · 切記優(yōu)化,應該是各部門協(xié)同,共同參與的工作,任何單一部門都不能對數據庫進行優(yōu)化! 所以優(yōu)化工作,是由業(yè)務需要驅使的! c.優(yōu)化由誰參與? 在進行數據庫優(yōu)化時,應由數據庫管理員、業(yè)務部門代表、應用程序架構師、應用程序設計人員、應用程序開發(fā)人員、硬件及系統(tǒng)管理員、存儲管理員等,業(yè)務相關人員共同參與。 2.優(yōu)化思路a.優(yōu)化什么? 在數據庫優(yōu)化上有兩個主要方面:即安全與性能。 · 安全->數據可持續(xù)性; · 性能->數據的高性能訪問。 b.優(yōu)化的范圍有哪些? 存儲、主機和操作系統(tǒng)方面: · 主機架構穩(wěn)定性; · I/O規(guī)劃及配置; · Swap交換分區(qū); · OS內核參數和網絡問題。 應用程序方面: · 應用程序穩(wěn)定性; · SQL語句性能; · 串行訪問資源; · 性能欠佳會話管理; · 這個應用適不適合用MySQL。 數據庫優(yōu)化方面: · 內存; · 數據庫結構(物理&邏輯); · 實例配置。 說明:不管是設計系統(tǒng)、定位問題還是優(yōu)化,都可以按照這個順序執(zhí)行。 c.優(yōu)化維度? 數據庫優(yōu)化維度有四個: 硬件、系統(tǒng)配置、數據庫表結構、SQL及索引。 優(yōu)化選擇: · 優(yōu)化成本:硬件>系統(tǒng)配置>數據庫表結構>SQL及索引。 · 優(yōu)化效果:硬件<系統(tǒng)配置<數據庫表結構<SQL及索引。 3.優(yōu)化工具有啥?a.數據庫層面? 檢查問題常用工具: 不常用但好用的工具: 關于Zabbix參考: b.數據庫層面問題解決思路? 一般應急調優(yōu)的思路:針對突然的業(yè)務辦理卡頓,無法進行正常的業(yè)務處理,需要立馬解決的場景。 常規(guī)調優(yōu)思路:針對業(yè)務周期性的卡頓,例如在每天10-11點業(yè)務特別慢,但是還能夠使用,過了這段時間就好了。 c.系統(tǒng)層面? Cpu方面: 內存: IO設備(磁盤、網絡): vmstat命令說明: iostat命令說明: d.系統(tǒng)層面問題解決辦法? 你認為到底負載高好,還是低好呢?在實際的生產中,一般認為Cpu只要不超過90%都沒什么問題。 當然不排除下面這些特殊情況: Cpu負載高,IO負載低: IO負載高,Cpu負載低: IO和cpu負載都很高: 4.基礎優(yōu)化 a.優(yōu)化思路? 定位問題點吮吸:硬件-->系統(tǒng)-->應用-->數據庫-->架構(高可用、讀寫分離、分庫分表)。 處理方向:明確優(yōu)化目標、性能和安全的折中、防患未然。 b.硬件優(yōu)化? 主機方面: CPU的選擇: ![]() 內存的選擇: 存儲方面: ![]() 網絡設備方面: 注意:以上這些規(guī)劃應該在初始設計系統(tǒng)時就應該考慮好。 c.服務器硬件優(yōu)化? ![]() d.系統(tǒng)優(yōu)化? Cpu: 內存: SWAP: IO : Swap調整(不使用swap分區(qū)) 這個參數決定了Linux是傾向于使用swap,還是傾向于釋放文件系統(tǒng)cache。在內存緊張的情況下,數值越低越傾向于釋放文件系統(tǒng)cache。 當然,這個參數只能減少使用swap的概率,并不能避免Linux使用swap。 修改MySQL的配置參數innodb_flush_ method,開啟O_DIRECT模式: 這種情況下,InnoDB的buffer pool會直接繞過文件系統(tǒng)cache來訪問磁盤,但是redo log依舊會使用文件系統(tǒng)cache。 值得注意的是,Redo log是覆寫模式的,即使使用了文件系統(tǒng)的cache,也不會占用太多。 IO調度策略: 永久修改 ![]() e.系統(tǒng)參數調整? Linux系統(tǒng)內核參數優(yōu)化: ![]() 用戶限制參數(MySQL可以不設置以下配置): ![]() f.應用優(yōu)化? 業(yè)務應用和數據庫應用獨立; 防火墻:iptables、selinux等其他無用服務(關閉): ![]() 安裝圖形界面的服務器不要啟動圖形界面runlevel 3。 另外,思考將來我們的業(yè)務是否真的需要MySQL,還是使用其他種類的數據庫。用數據庫的最高境界就是不用數據庫。 5.數據庫優(yōu)化SQL優(yōu)化方向:執(zhí)行計劃、索引、SQL改寫。 架構優(yōu)化方向:高可用架構、高性能架構、分庫分表。 a.數據庫參數優(yōu)化? 調整 實例整體(高級優(yōu)化,擴展): ![]() 連接層(基礎優(yōu)化) 設置合理的連接客戶和連接方式: ![]() SQL層(基礎優(yōu)化) ![]() b.存儲引擎層(innodb基礎優(yōu)化參數)? ![]() 歡迎工作一到五年的Java工程師朋友們加入Java填坑之路:860113481 群內提供免費的Java架構學習資料(里面有高可用、高并發(fā)、高性能及分布式、Jvm性能調優(yōu)、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用'沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代! |
|
|
來自: 昵稱16619343 > 《科學技術》