一. 優(yōu)化介紹
在進行優(yōu)化講解之前,健哥鄭重的和各位小伙伴說。本課程只是給大家提供一些優(yōu)化方面的方向和思路,而具體業(yè)務場景的不同,使用的MySQL服務版本不同,都會使得優(yōu)化方案的制定也不同。優(yōu)化不存在按照某種方式去做就一定好用的絕對真理。
MySQL介紹
MySQL憑借著出色的性能、低廉的成本、豐富的資源,已經成為絕大多數互聯(lián)網公司的首選關系型數據庫。可以看到Google,Facebook,Twitter,百度,新浪,騰訊,淘寶,網易,久游等絕大多數互聯(lián)網公司數據庫都是用的MySQL數據庫,甚至將其作為核心應用的數據庫系統(tǒng)。
我們知道一般的應用系統(tǒng),讀寫比例在10:1左右,而且插入操作和一般的更新操作很少出現性能問題,遇到最多的,也是最容易出問題的,還是一些復雜的查詢操作,所以查詢語句的優(yōu)化顯然是重中之重。
我們將這里進行一個較為全面的分析,讓大家了解到MySQL的性能到底與哪些地方有關,以便于讓大家尋找出其性能問題的根本原因,而盡可能清楚的知道該如何去優(yōu)化自己的數據庫。
優(yōu)化可能帶來的問題
● 優(yōu)化不總是對一個單純的環(huán)境進行,還很可能是一個復雜的已投產的系統(tǒng)!
● 優(yōu)化手段有很大的風險,一定要意識到和預見到!
● 任何的技術可以解決一個問題,但必然存在帶來一個問題的風險!
● 對于優(yōu)化來說調優(yōu)而帶來的問題,控制在可接受的范圍內才是有成果。
● 保持現狀或出現更差的情況都是失敗!
優(yōu)化的需求
● 穩(wěn)定性和業(yè)務可持續(xù)性,通常比性能更重要!
● 優(yōu)化不可避免涉及到變更,變更就有風險!
● 優(yōu)化使性能變好,維持和變差是等概率事件!
● 優(yōu)化應該是各部門協(xié)同,共同參與的工作,任何單一部門都不能對數據庫進行優(yōu)化!
優(yōu)化由誰參與
在進行數據庫優(yōu)化時,應由數據庫管理員、業(yè)務部門代表、應用程序架構師、應用程序設計人員、應用程序開發(fā)人員、硬件及系統(tǒng)管理員、存儲管理員等,業(yè)務相關人員共同參與。
優(yōu)化的方向
在數據庫優(yōu)化上有兩個主要方向:即安全與性能。
安全:數據安全性。
性能:數據的高性能訪問。
本課程主要是在性能優(yōu)化方向進行介紹。
優(yōu)化的維度
從上圖中可以看出,我們把數據庫優(yōu)化分為四個緯度:硬件,系統(tǒng)配置,數據庫表結構,SQL及索引。
硬件: CPU、內存、存儲、網絡設備等。
系統(tǒng)配置: 服務器系統(tǒng)、數據庫服務參數等。
數據庫表結構: 高可用、分庫分表、讀寫分離、存儲引擎、表設計等。
SQL及索引: sql語句、索引使用等。
從優(yōu)化成本進行考慮:硬件>系統(tǒng)配置>數據庫表結構>SQL及索引。
從優(yōu)化效果進行考慮:硬件<系統(tǒng)配置<數據庫表結構<sql及索引。< p="">
數據庫使用優(yōu)化思路
健哥在這里盡可能的全面介紹數據庫的調優(yōu)思路,但是在多數時候,我們進行調優(yōu)不需要進行這么全面、大范圍的調優(yōu),一般情況下,我們進行數據庫層面的優(yōu)化就可以了,那我們該如何調優(yōu)的呢?
應急調優(yōu)的思路:
針對突然的業(yè)務辦理卡頓,無法進行正常的業(yè)務處理!需要立馬解決的場景!
show processlist(查看鏈接session狀態(tài))。
explain(分析查詢計劃),show index from table(分析索引)。
通過執(zhí)行計劃判斷,索引問題(有沒有、合不合理)或者語句本身問題。
show status like '%lock%'; # 查詢鎖狀態(tài)。
SESSION_ID; # 殺掉有問題的session。
常規(guī)調優(yōu)的思路:
針對業(yè)務周期性的卡頓,例如在每天10-11點業(yè)務特別慢,但是還能夠使用,過了這段時間就好了。
查看slowlog,分析slowlog,分析出查詢慢的語句。
按照一定優(yōu)先級,進行一個一個的排查所有慢語句。
分析top sql,進行explain調試,查看語句執(zhí)行時間。
調整索引或語句本身。