mysql開啓慢查詢日誌和profile

mysql慢查詢日誌對於跟蹤有問題的查詢非常有用,可以分析出當前程序裏有很耗費資源的sql語句,以便後期跟蹤優化。mysqld在語句執行完並且所有鎖釋放後記入慢查詢日誌。
1.通過配置開啓,需要重啓mysql服務,但是持久配置
vi my.cnf
-------------------------------------
slow_query_log = ON
slow_query_log_file = /var/log/mysql_slow_querys.log 
long_query_time = 3 
log-queries-not-using-indexes 
log-slow-admin-statements

2.通過修改mysql的全局變量,不需要重啓服務,臨時配置,重啓配置丟失
set global slow_query_log=ON;
set global slow_query_log_file="/var/log/mysql_slow_querys.log"
set global long_query_time=3;
set global log-queries-not-using-indexes=ON
set global log-slow-admin-statements=ON

3.查看配置情況
mysql>show variables like 'long%';
mysql>show variables like 'slow%';

4.參數說明
slow_query_log      :  指定是否開啓慢查詢日誌 ON|OFF (1|0)  缺省關閉
log_slow_queries    :  指定是否開啓慢查詢日誌(該參數要被slow_query_log取代,做兼容性保留)
slow_query_log_file :  指定慢日誌文件存放位置,可以爲空,系統會給一個缺省的文件host_name-slow.log
long_query_time    :  設定慢查詢的閥值,超出次設定值的SQL即被記錄到慢查詢日誌,單位爲妙,缺省值爲10s
min_examined_row_limit:查詢檢查返回少於該參數指定行的SQL不被記錄到慢查詢日誌
log_queries_not_using_indexes: 不使用索引的慢查詢日誌是否記錄到索引
log-slow-admin-statements :開啓記錄管理型慢SQL。缺省情況下數據庫相關管理型SQL(比如OPTIMIZE TABLE、ANALYZE TABLE和ALTER TABLE)不會被記錄到日誌。
log_throttle_queries_not_using_indexes: 每分鐘允許記錄到slow log的且未使用索引的SQL語句次數。該值默認爲0,表示沒有限制,在生產環境下,若沒有使用索引,此類SQL語句會頻繁地被記錄到slow log,從而導致slow log文件的大小不斷增加,故DBA可通過此參數進行配置。該參數MySQL 5.6.5版本開始新增

用查詢緩存處理的查詢不加到慢查詢日誌中,表有零行或一行而不能從索引中受益的查詢也不寫入慢查詢日誌。
  MySQL服務器按以下順序記錄SQL是否寫入到慢查詢日誌
    a. The query must either not be an administrative statement, or --log-slow-adminstatements must have been specified.
    b. The query must have taken at least long_query_time seconds, or log_queries_not_using_indexes must be enabled and the query used no indexes for row lookups.
    c. The query must have examined at least min_examined_row_limit rows.
    d. The query must not be suppressed according to the log_throttle_queries_not_using_indexes setting.

5.使用mysqldumpslow命令分析慢查詢日誌
可以使用mysqldumpslow命令獲得日誌中顯示的查詢摘要來處理慢查詢日誌。
進入mysql/bin目錄,輸入mysqldumpslow –help或--help可以看到這個工具的參數,主要有

-s,order的順序,默認是at。c,t,l,r和ac,at,al,ar,分別是按照query次數,查詢時間,lock時間和返回的記錄數來排序,前面加了a的時平均值
-r  最大的放在最後
-t,是top n,即爲返回前面多少條的數據 
-g,後邊可以寫一個正則匹配模式,大小寫不敏感的 

訪問次數最多的20個sql語句
mysqldumpslow -s c -t 20 host-slow.log 
按照時間返回前10條裏面含有左連接的sql語句。
mysqldumpslow -t 10 -s t -g “left join” host-slow.log 
按照最大耗用時間排最後,只顯示2條
mysqldumpslow -r -t 2 /var/lib/mysql/suse11b-slow.log

除了,通過查詢慢查詢日誌並分析,我們也可以通過show profile來查看sql的執行情況:
1.查看profiling是否開啓
show variables like "%pro%";
開啓:set profiling=1;
2.查詢操作,並使用 show profiles查看執行的sql



也可以查看執行計劃
EXPLAIN  SELECT ……
變體:
1. EXPLAIN EXTENDED SELECT ……
將執行計劃“反編譯”成SELECT語句,運行SHOW WARNINGS 可得到被MySQL優化器優化後的查詢語句 
2. EXPLAIN PARTITIONS SELECT ……
用於分區表的EXPLAIN

發佈了404 篇原創文章 · 獲贊 205 · 訪問量 227萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章