下面是小凰凰的簡介,看下吧!
💗人生態度:珍惜時間,渴望學習,熱愛音樂,把握命運,享受生活
💗學習技能:網絡 -> 雲計算運維 -> 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:後邊搭配一個正則匹配模式,大小寫不敏感的
工作常用參考:
得到返回記錄集最多的10個SQL
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條裏面含有左連接的查詢語句
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是當前會話有效!