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