mysql的慢查詢日誌時mysql提供的一種日誌記錄,它用來記錄在mysql中響應時間超過閥值的語句。
具體指執行時間超過long_query_time值的sql,則會被記錄到慢查詢日誌中。
long_query_time的預設值為10,意思是執行10s以上的語句。就會被認作是慢查詢。
預設情況下,mysql資料庫並不啟動慢查詢日誌,需要我們手動來設定這個引數,如果不是調優需要的話,一般不建議啟動該引數,因為開啟慢查詢日誌會或多或少帶來一定的效能影響。
慢查詢日誌支援將日誌記錄寫入檔案,也支援將日誌記錄寫入資料庫表,
引數:slow_query_log 慢查詢是否開啟 off 關閉 on開啟
slow_query_log_file 日誌檔案位置
set global slow_query_log=1;
這種方式只對當前資料庫有效,如果重啟後,則會失效
如果想永久生效,在my.cnf檔案加上以下配置
slow_query_log=1
slow_query_log_file=/usr/local/mysql/data/docker-slow.log
查詢long_query_time當前閥值,預設是10秒
更改long_query_time的閥值時間
set global long_query_time=4;
設定完查詢long_query_time的值還是10s,這個引數斷開連線之後才會生效
重新連線之後long_query_time值為4秒
測試以下慢查詢功能
select sleep(5);
可以通過 show global status like 『%slow_queries%』;這個語句檢視日誌檔案中記錄了幾條慢查詢sql
慢查詢日誌檔案在第二步已經獲取到/usr/local/mysql/data/docker-slow.log
檢視慢查詢日誌檔案
引數說明
-s按照哪種方式排序
c訪問計數
l鎖定時間
r返回記錄
al平均鎖定時間
ar平均訪問記錄數
at平均查詢時間
-t是top n的意思,返回多少條資料
-g可以跟上正則匹配模式,大小寫不敏感
show profile是mysql提供的可以用來分析當前會話中sql語句執行的資源消耗情況的工具,可用於sql調優的測量。
預設情況下處於關閉狀態,並儲存最近15次的執行結果。把一條sql在mysql當中每乙個環節耗費的時間都記錄下來。
show variables like 'profiling';
預設是關閉狀態
set profiling=on;
先寫一條sql並執行
select * from employee where id > 100000
檢視執行結果
show profiles;
這裡的數字3是在上一步show profiles的時候sql對應的query_id
show profile cpu,block io for query 3
converting heap to myisam 查詢結果太大,記憶體不夠用了,往磁碟上存上了
creating tmp table 建立臨時表, copy資料到臨時錶用完再進行刪除
copying to tmp table on disk 把記憶體中臨時表複製到磁碟,危險操作
locked 被鎖定
效能優化 MySQL慢查日誌的儲存格式
如下圖所示 說明 1 time 180526 1 06 54 查詢的執行時間 2 user host root root localhost id 4 執行sql的主機資訊 3 query time 0.000401 lock time 0.000105 rows sent 2 rows exami...
MySQL慢日誌優化
慢日誌的效能問題 造成 i o 和 cpu 資源消耗 慢日誌通常會掃瞄大量非目的的資料,自然就會造成 i o 和 cpu 的資源消耗,影響到其他業務的正常使用,有可能因為單個慢 sql 就能拖慢整個資料庫的效能,而且這種慢 sql,在實際業務場景下,通常都是程式發起數個 sql 請求,通過 show...
匹配MySQL慢日誌的正則 mysql慢查詢日誌
新增慢查詢日誌 第一種 修改my.cnf新增 薦 log slow queries var log slowquery.log long query time 1 重啟mysql 第二種 命令下新增 set global long query time 1 注 long query time的值 5...