MySQL高階效能優化 慢日誌查詢

2021-09-25 05:22:40 字數 2945 閱讀 3163

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...