MySQL基礎(十一):查詢截取分析

下面是小凰凰的簡介,看下吧!
💗人生態度:珍惜時間,渴望學習,熱愛音樂,把握命運,享受生活
💗學習技能:網絡 -> 雲計算運維 -> python全棧( 當前正在學習中)
💗您的點贊、收藏、關注是對博主創作的最大鼓勵,在此謝過!
有相關技能問題可以寫在下方評論區,我們一起學習,一起進步。
後期會不斷更新python全棧學習筆記,秉着質量博文爲原則,寫好每一篇博文。

一、慢查詢日誌

1、什麼是慢查詢日誌?

MySQL的慢查詢日誌是MySQL提供的一種日誌記錄,它用來記錄在MySQL中響應時間超過閥值的語句,具體指運行時間超過long_query_time值的SQL,則會被記錄到慢查詢日誌中。

2、拿它來幹什麼?怎麼幹?

(1)用途及開啓方法

幹什麼:找出查詢較慢的sql,並用explain對該sql進行分析,找出問題癥結進行sql優化!
使用前說明:

'默認情況下,MySQL數據庫沒有開啓慢查詢日誌',需要我們手動來設置這個參數。 

'當然,如果不是調優需要的話,一般不建議啓動該參數' ,因爲開啓慢查詢日誌會或多或少帶來一定的性能影響。慢查詢日誌支持將日誌記錄寫入文件 

查看是否開啓及如何開啓?

查看默認情況:SHOW VARIABLES LIKE '%slow_query_log%';
開啓命令:set global slow_query_log=1;
# my.cnf中開啓慢查詢日誌
# [mysqld]下配置:
slow_query_log=1; 
slow_query_log_file=/var/lib/mysql/atguigu-slow.log 
long_query_time=3; 
log_output=FILE 
(2)多慢的sql會被記錄到日誌?

查看當前多少秒算慢 :SHOW VARIABLES LIKE 'long_query_time%';

# 設置慢的闕值時間:
set global long_query_time=1 
修改爲闕值到1秒鐘的就是慢sql 

在這裏插入圖片描述
重新斷開會話,再連接!就可以看到值的變化了!

(3)慢查詢日誌實踐

在這裏插入圖片描述
跟蹤日誌信息:
在這裏插入圖片描述

3、日誌分析工具mysqldumpslow

命令參數詳解:

s: 是表示按照何種方式排序
c: 訪問次數
l: 鎖定時間
r: 返回記錄
t: 查詢行數
al:平均鎖定時間
ar:平均返回記錄數
at:平均查詢時間
t:即爲返回前面多少條的數據;
g:後邊搭配一個正則匹配模式,大小寫不敏感的

工作常用參考:

得到返回記錄集最多的10SQL 
mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log 


得到訪問次數最多的10SQL 
mysqldumpslow -s c -t 10 /var/lib/mysql/atguigu-slow.log 


得到按照時間排序的前10條裏面含有左連接的查詢語句 
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/atguigu-slow.log 


另外建議在使用這些命令時結合 | 和more 使用 ,否則有可能出現爆屏情況 
mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log | more 

二、show profile

1、show profile是什麼?

它是mysql提供可以用來分析當前會話中語句執行的資源消耗情況。可以用於SQL的調優的測量

2、分析步驟

(1)查看當前mysql版本是否支持profile
show variables like 'profiling';
(2)開啓profile
set profiling=1;  # 沒有global,默認是基於session會話的變量設置
(3)運行mysql命令
(4)查看結果
show profiles;

在這裏插入圖片描述

(5)診斷SQL
show profile cpu,block io for query n; # n爲上一步前面的問題SQL數字號碼

在這裏插入圖片描述
show profile命令參數釋義:

type:   
 | ALL                        --顯示所有的開銷信息   
 | BLOCK IO                --顯示塊IO相關開銷   
 | CONTEXT SWITCHES --上下文切換相關開銷   
 | CPU              --顯示CPU相關開銷信息   
 | IPC              --顯示發送和接收相關開銷信息   
 | MEMORY           --顯示內存相關開銷信息   
 | PAGE FAULTS      --顯示頁面錯誤相關開銷信息   
 | SOURCE           --顯示和Source_function,Source_file,Source_line相關的開銷信息   
 | SWAPS            --顯示交換次數相關開銷的信息 
(6)show profile分析時,一些比較重要問題
1. converting HEAP to MyISAM 查詢結果太大,內存都不夠用了往磁盤上搬了。
2. Creating tmp table 創建臨時表(拷貝數據到臨時表,用完再刪除)
3. Copying to tmp table on disk 把內存中臨時表複製到磁盤,危險!!!
4. locked

三、全局查詢日誌(瞭解)

在mysql的my.cnf中,設置如下: 
#開啓 
general_log=1    
# 記錄日誌文件的路徑 
general_log_file=/path/logfile 
#輸出格式 
log_output=FILE
此種日誌不推薦這樣永久開啓,因爲會極大影響數據庫性能!
命令 
set global general_log=1; 
# 全局日誌可以存放到日誌文件中,也可以存放到Mysql系統表中。存放到日誌中性能更好一些,存儲到表中 
set global log_output='TABLE';  # 這裏的TABLE不能改,不支持指定表
此後 ,你所編寫的sql語句,將會記錄到mysql庫裏的general_log表,可以用下面的命令查看 
 select * from mysql.general_log; 

注意這裏再次說下:set變量的三種方法(my.cnf、global、session),my.cnf是永久有效,global是重啓mysql服務後失效,session是當前會話有效!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章