慢查詢日誌是mysql日誌功能的一種,記錄查詢時間大於預設或設定值的sql語句,也就是記錄執行時間超過long_query_time值的sql(支援寫入檔案中)。
mysql資料庫的long_query_time預設值的10,即10秒。這個值可由我們自己設定。
預設情況下,mysql資料庫沒有開啟慢查詢日誌,需要我們手動來設定這個引數。如果不是調優需要的話,一般不建議啟動該引數,因為開啟慢查詢會或多或少帶來一定的效能影響。
slow_query_log值是off,即關閉,也是預設值。slow_query_log_file:日誌記錄所在路徑及檔名。
開啟命令:
slow_query_log值等於on,代表已經開啟。不過使用此命令開啟,重啟之後會失效。
這個東西不應該長久生效,若一定要長期開啟,可以修改my.cnf配置檔案。在[mysqld]下增加引數:slow_query_log和slow_query__log_file,如:
slow_query_log=1 slow_query_log_file=/var/lib/mysql/vm_0_9_centos-slow.log
slow_query_log_file這個值可以預設,會給預設值:hostname-slow.log,以上就是我本機預設的值。增加修改引數後重啟資料庫伺服器。
執行時間超過long_query_time值的sql將會被記錄到慢查詢日誌中,檢視long_query_time值:
預設值是10秒,要大於10才會被記錄,所以等於也不會。這個值可用命令修改,也可以在my.cnf中修改。假設超過3秒就認為是慢查詢,通過命令可以這樣修改:
修改之後馬上檢視會發現值還沒有改變,此時需要我們重新連線或者開啟新的會話。下圖就是在新開會話中檢視的:
是3秒,沒有問題。
現在使用sleep函式模擬乙個慢查詢,看看效果:
select sleep(4);
可以使用cat命令列印出日誌檔案內容,也可vi(vim)命令
最後一行即剛才模擬的sql,生產環境我們可以把此sql拿到,然後結合explain做進一步的分析。
mysqldumpslow是mysql提供的乙個日誌分析工具,方便我們在分析日誌時候減少一些工作量。而且在生產環境中,我們可以利用工具,根據某些條件得到想要的慢sql。
mysqldumpslow幫助資訊:
下面是其中一些選項的意義:
s:是表示按照何種方式排序;c:訪問次數l:鎖定時間r:返回記錄t:查詢時間al:平均鎖定時間ar:平均返回記錄數at:平均查詢時間t:即為返回前面多少條的資料;g:後邊搭配乙個正則匹配模式,大小寫不敏感。
我們可以用以上引數進行拼裝,然後得到我們想要的慢sql。如得到訪問次數最多的10條sql:
mysqldumpslow -s c -t 10 /var/lib/mysql/vm_0_9_centos-slow.log
結果形式如下
這裡簡單地舉乙個例子好了,其餘的自己可以在工作中多去運用。
mysql回表慢sql SQL慢查詢常用優化方法
先建立測試表並使用儲存過程插入測試資料 create table cif student id varchar 40 not null,name varchar 40 default null,age varchar 40 default null,class id varchar 40 defau...
Mysql查詢所有的表名和查詢表中所有的欄位名
最近的乙個專案中用到兩個東西,乙個就是傳入資料庫連線就自動複製該庫的所有表結構,其二就是在搜尋中用到獲取庫中的表和表中的字段,所以記錄一下,至於專案情況,隨後更新。獲取所有資料庫名稱 獲取庫中的所有表名稱 select column name from information schema.colu...
mysql 樹表查詢所有子節點
create table ifnot exists sys dept id bigint 20 not null auto increment comment 部門id parent id bigint 20 default 0 comment 父部門id ancestors varchar 50 ...