影響一個系統(tǒng)的運行速度的原因有很多,是多方面的,甚至可能是偶然性的,或前端,或后端,或數(shù)據(jù)庫,或中間件,或服務(wù)器,或網(wǎng)絡(luò)等等等等,真正的去定位一個問題需要對系統(tǒng)有一定的認知,可以根據(jù)自身的判斷去縮小問題范圍。
今天不說其他的優(yōu)化,單獨把數(shù)據(jù)庫的優(yōu)化拿出來說幾個優(yōu)化方向。
跟系統(tǒng)的優(yōu)化方向一樣,數(shù)據(jù)庫的優(yōu)化,同樣也是多方面的,其中涵蓋著SQL語句的執(zhí)行情況,數(shù)據(jù)庫自身的情況等等,下面我們就來說一下MySQL數(shù)據(jù)庫中的慢SQL語句優(yōu)化方向,希望也能給到大家一些優(yōu)化思路。
SQL語句的優(yōu)化,有很多文章說起,也有很多在SQL編寫上的指導(dǎo);但是那種只能支持基本開發(fā),如果要排查問題,那就不能單單的只是停留在SQL編寫上了,而是有一個整體的發(fā)現(xiàn)問題的流程。
本次優(yōu)化方向,大概分為發(fā)現(xiàn)慢查詢SQL,查看并解析SQL執(zhí)行計劃,SQL編寫上的優(yōu)化,索引優(yōu)化等幾個方面。
MySQL中記錄慢查詢SQL是可以利用MySQL內(nèi)部配置來實現(xiàn)的,這個配置就是slow_query_log配置。
可利用show variables like '%query%';查詢出以下三個相關(guān)結(jié)果。
long_query_time | 1.00000 slow_query_log | off slow_query_log_file | /data/mysql/mysql_slow.log
解釋一下這三個參數(shù),
有兩個方法。
其一:修改my.ini或者是my.cnf文件,將此三項配置進行一個配置。
其二:直接在sqlplus中,使用set語法來修改參數(shù),但是重啟mysql數(shù)據(jù)庫后就會失效,sql如下:
set global long_query_time = 10; set global slow_query_log = on; set global slow_query_log_file = /data/mysql/mysql_slow.log;
因為這個方法會重啟失效,所以還是建議使用第一種方式。
如何查詢慢查詢?nèi)罩灸兀绻亢苄〉那闆r下,其實是不需要使用工具的,完全可以直接打開即可。
如果量比較大,就需要mysqldumpslow工具查詢會更方便。
mysqldumpslow是和mysqld相同類型的執(zhí)行腳本,可以直接在命令行中執(zhí)行,具體的使用方法如下:
mysqldumpslow參數(shù):
-s,是order的順序
-----al 平均鎖定時間
-----ar 平均返回記錄時間
-----at 平均查詢時間(默認)
-----c 計數(shù)
-----l 鎖定時間
-----r 返回記錄
-----t 查詢時間-t,top,即為返回前面多少條的數(shù)據(jù)
-g,自定義正則表達式
舉個例子,如下:
mysqldumpslow -s r -t 5 /data/mysql/mysql_slow.log
查詢出返回記錄集最多的5個慢查詢SQL。
更多用法之后我建個測試庫單獨寫篇文章細說一下。
查看執(zhí)行計劃關(guān)鍵詞:EXPLAIN
就是直接執(zhí)行 EXPLAIN SELECT * FROM TABLE_NAME;
這個一開始我是打算簡單說一下的,后來發(fā)現(xiàn)篇幅太長了,這個留待下篇文章里,感謝理解。
SQL的編寫優(yōu)化就很多了,我這里也整理出了一些,請大家自行查漏補缺。
從數(shù)據(jù)庫角度看:每個SQL執(zhí)行都需要消耗一定I/O資源,SQL執(zhí)行的快慢,決定資源被占用時間的長短。假設(shè)總資源是100,有一條慢SQL占用了30的資源共計1分鐘。那么在這1分鐘時間內(nèi),其他SQL能夠分配的資源總量就是70,如此循環(huán),當資源分配完的時候,所有新的SQL執(zhí)行將會排隊等待。
從應(yīng)用的角度看:SQL執(zhí)行時間長意味著等待,在OLTP應(yīng)用當中,用戶的體驗較差
治理的優(yōu)先級上
這里面遠遠還沒有講全,還有很多種編寫規(guī)則,同時還有索引的建立并沒有聊,留給大家一些自己看書的時間,希望大家有所進步。
到此這篇關(guān)于MySQL中慢SQL優(yōu)化方向的文章就介紹到這了,更多相關(guān)MySQL慢SQL優(yōu)化方向內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!