對慢sql優化一般可以按下面幾步的思路:
1、開啟慢查詢日誌,設定超過幾秒為慢sql,抓取慢sql
2、通過explain對慢sql分析(重點)
3、show profile查詢sql在mysql伺服器裡的執行細節和生命週期情況(重點)
4、對資料庫伺服器的引數調優
1、設定慢查詢
(1)設定開啟:set global slow_query_log =2、獲取慢sql資訊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
檢視慢查詢日誌記錄數:show global status like模擬語句:select sleep(4);'%slow_queries%
';
檢視日誌:cat atguigu-slow.log
3、搭配日誌分析工具mysqldumpslow
mysqldumpslow -s r -t 10通過explain分析慢sql很重要,單獨一章列舉,mysql優化(4):explain分析。/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:後邊搭配乙個正則匹配模式,大小寫不敏感
show profile也是分析慢sql的一種手段,但它能獲得比explain更詳細的資訊,能分析當前會話中語句執行的資源消耗情況,能獲得這條sql在整個生命週期的耗時,相當於執行時間的清單,也很重要。
1、預設關閉。開啟後,會在後台儲存最近15次的執行結果,然後通過show profile命令檢視結果。
開啟:set profiling =on;2、通過show profile能檢視sql的耗時檢視:show variables
like
'profiling%
';
3、通過query_id可以得到具體sql從連線 - 服務 - 引擎 - 儲存四層結構完整生命週期的耗時
可用引數type:4、出現這四個all#顯示所有的開銷資訊
block io #顯示塊io相關開銷
context switches #上下文切換相關開銷
cpu #顯示cpu相關開銷資訊
ipc #顯示傳送和接收相關開銷資訊
memory #顯示記憶體相關開銷資訊
page faults #顯示頁面錯誤相關開銷資訊
source #顯示和source_function,source_file,source_line相關的開銷資訊
swaps #顯示交換次數相關開銷的資訊
status時說明有問題,group by可能會建立臨時表
#危險狀態:converting heap to
myisam #查詢結果太大,記憶體不夠用了,在往磁碟上搬
creating tmp
table
#建立了臨時表,回先把資料拷貝到臨時表,用完後再刪除臨時表
copying
to tmp table
ondisk
#把記憶體中臨時表複製到磁碟,危險!!!
只在測試環境用,別在生產環境用,會記錄所有使用過的sql
1、開啟:
開啟:會將sql記錄到mysql庫的general_log表2、檢視set global general_log=1;
set global log_output=
'table';
配置檔案的方式:
在my.cnf中配置
general_log=1
#開啟 general_log_file
=/path/
logfile #記錄日誌檔案的路徑
log_output
=file #輸出格式
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.如果不是自己想的時間,修改慢查詢時間,只要超過了...