MySQL優化 3 慢SQL分析

2022-07-27 22:15:21 字數 3545 閱讀 1805

對慢sql優化一般可以按下面幾步的思路:

1、開啟慢查詢日誌,設定超過幾秒為慢sql,抓取慢sql

2、通過explain對慢sql分析(重點)

3、show profile查詢sql在mysql伺服器裡的執行細節和生命週期情況(重點)

4、對資料庫伺服器的引數調優

1、設定慢查詢

(1)設定開啟:set global slow_query_log =

1;   #預設未開啟,開啟會影響效能,mysql重啟會失效

(2)檢視是否開啟:show variables

like

'%slow_query_log%';

(3)設定閾值:

set global long_query_time=3;

(4)檢視閾值:show 【global】 variables

like

'long_query_time%

';  #重連或新開乙個會話才能看到修改值

(5)通過修改配置檔案my.cnf永久生效,在

[mysqld

]下配置:  [

mysqld

]slow_query_log =1

;  #開啟

slow_query_log_file

=/var

/lib/mysql/atguigu-slow.log   #慢日誌位址,預設檔名host_name-slow.log

long_query_time

=3;   #執行時間超過該值的sql會被記錄,預設

10log_output

=file

2、獲取慢sql資訊   

檢視慢查詢日誌記錄數:show global status like

'%slow_queries%

';

模擬語句:select sleep(4);

檢視日誌:cat atguigu-slow.log

3、搭配日誌分析工具mysqldumpslow

mysqldumpslow -s r -t 10

/var

/lib/mysql/atguigu-slow.log

#得到返回記錄集最多的10個sql

mysqldumpslow

-s c -t 10

/var

/lib/mysql/atguigu-slow.log

#得到訪問次數最多的10個sql

mysqldumpslow

-s t -t 10

-g "left

join" /

var/lib/mysql/atguigu-slow.log

#得到按照時間排序的前10條裡面含有左連線的查詢語句

mysqldumpslow

-s r -t 10

/var

/lib/mysql/atguigu-slow.log

| more #結合|

more使用,防止爆屏情況

s:表示按何種方式排序

c:訪問次數

l:鎖定時間

r:返回記錄

t:查詢時間

al:平均鎖定時間

ar:平均返回記錄數

at:平均查詢時間

t:返回前面多少條的資料

g:後邊搭配乙個正則匹配模式,大小寫不敏感

通過explain分析慢sql很重要,單獨一章列舉,mysql優化(4):explain分析。

show profile也是分析慢sql的一種手段,但它能獲得比explain更詳細的資訊,能分析當前會話中語句執行的資源消耗情況,能獲得這條sql在整個生命週期的耗時,相當於執行時間的清單,也很重要。

1、預設關閉。開啟後,會在後台儲存最近15次的執行結果,然後通過show profile命令檢視結果。

開啟:set profiling =on;

檢視:show variables

like

'profiling%

';

2、通過show profile能檢視sql的耗時

3、通過query_id可以得到具體sql從連線 - 服務 - 引擎 - 儲存四層結構完整生命週期的耗時

可用引數type:

all#顯示所有的開銷資訊

block io  #顯示塊io相關開銷

context switches  #上下文切換相關開銷

cpu #顯示cpu相關開銷資訊

ipc #顯示傳送和接收相關開銷資訊

memory #顯示記憶體相關開銷資訊

page faults  #顯示頁面錯誤相關開銷資訊

source  #顯示和source_function,source_file,source_line相關的開銷資訊

swaps  #顯示交換次數相關開銷的資訊

4、出現這四個

status時說明有問題,group by可能會建立臨時表

#危險狀態:

converting heap to

myisam   #查詢結果太大,記憶體不夠用了,在往磁碟上搬

creating tmp

table

#建立了臨時表,回先把資料拷貝到臨時表,用完後再刪除臨時表

copying

to tmp table

ondisk

#把記憶體中臨時表複製到磁碟,危險!!!

只在測試環境用,別在生產環境用,會記錄所有使用過的sql

1、開啟:

開啟:會將sql記錄到mysql庫的general_log表

set global general_log=1;

set global log_output=

'table';

配置檔案的方式:

在my.cnf中配置

general_log=1

#開啟 general_log_file

=/path/

logfile #記錄日誌檔案的路徑

log_output

=file #輸出格式

2、檢視

Mysql慢查詢分析與優化

慢查詢 顧名思義,耗時很長 響應很慢的查詢 危害 導致整個資料庫響應變慢 過多消耗cpu或者io 短連線場景下還可能引起耗盡連線數 以下引數均是是在mysql的配置檔案 etc my.cnf中配置的,配置在 mysqld 下。引數名含義 slow query log 是否開啟慢查詢 long que...

慢SQL優化 索引優化

在專案開發的時候難免會寫一些sql語句,剛開始資料量比較小或沒預料到資料的增長速度很快,在後期的維護中偶爾會有慢sql出現,嚴重的會影響到線上服務正常執行和使用者體驗。當然慢sql的優化角度有多種,比如增 減索引 調整搜尋條件的順序 優化查詢結果引數 分庫分表 讀寫分離等等,但本篇我們主要談一下索引...

mysql的慢查詢實戰 sql優化

背景 使用a電腦安裝mysql,b電腦通過xshell方式連線,資料內容我都已經建立好,現在我已正常的進入到mysql中 2.開啟慢查詢日誌 set global slow query log on 3.檢視慢查詢日誌的設定時間,是否是自己需要的 4.如果不是自己想的時間,修改慢查詢時間,只要超過了...