標籤:
當系統效能達到瓶頸的時候,就需要去尋找那些操作對系統的效能影響比較大,這裡可以使用資料庫的慢查詢日誌功能來記錄一些比較耗時的資料可操作來確定哪些地方需要最佳化.
下面介紹一下使用慢查詢日誌的一些常用命令
1,查看是否開啟慢查詢日誌:
show variables like ‘%slow%‘;
2,設定未使用索引的查詢記錄到日誌裡
set global log_queries_not_using_indexes=on;
3,查看超過多長時間的sql進行記錄到慢查詢日誌
show variables like ‘long_query_time‘;4,設定超過多長時間的sql進行記錄到慢查詢日誌set global long_query_time=0;5,開啟慢查詢日誌
set global slow_query_log=on;
6,查看日誌記錄位置
show variables like ‘slow_query_log_file‘
7,查看日誌(這是Linux下的命令)
tail -50 /home/mysql/data/mysql-slow.log
7,查看詳細的配置項
show variables like ‘%log%‘;
下面開始介紹怎麼讀日誌內容
執行sql的主機資訊
#[email protected]:root[root] @localhost[]
sql的執行資訊
# Query_time: 0.004883 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 1use mblog;
sql執行時間(時間戳記)
SET timestamp=1463926469;
sql的內容
SHOW COLUMNS FROM `mblog`.`tb_item`;
MySQL慢查日誌分析工具:
1 mysqldumpslow (mysql內建的工具,分析的不太詳細)
2 pt-query-digest (推薦,月亮還是外國的圓,這個分析的比較好)http://www.percona.com/get/pt-query-digest
下面對pt-query-digest的用法做一個簡單的講解
1文法
create-review-table 當使用--review參數把分析結果輸出到表中時,如果沒有表就自動建立。
create-history-table 當使用--history參數把分析結果輸出到表中時,如果沒有表就自動建立。
filter 對輸入的慢查詢按指定的字串進行匹配過濾後再進行分析
limit限制輸出結果百分比或數量,預設值是20,即將最慢的20條語句輸出,如果是50%則按總回應時間佔比從大到小排序,輸出到總和達到50%位置截止。
host mysql伺服器位址
user mysql使用者名稱 password mysql使用者密碼
history 將分析結果儲存到表中,分析結果比較詳細,下次再使用--history時,如果存在相同的語句,且查詢所在的時間區間和曆史表中的不同,則會記錄到資料表中,可以通過查詢同一CHECKSUM來比較某類型查詢的曆史變化。
review 將分析結果儲存到表中,這個分析只是對查詢條件進行參數化,一個類型的查詢一條記錄,比較簡單。當下次使用--review時,如果存在相同的語句分析,就不會記錄到資料表中。
output 分析結果輸出類型,值可以是report(標準分析報告)、slowlog(Mysql slow log)、json、json-anon,一般使用report,以便於閱讀。
since 從什麼時間開始分析,值為字串,可以是指定的某個”yyyy-mm-dd [hh:mm:ss]”格式的時間點,也可以是簡單的一個時間值:s(秒)、h(小時)、m(分鐘)、d(天),如12h就表示從12小時前開始統計。
until 截止時間,配合—since可以分析一段時間內的慢查詢。
2統計結果中各項的含義 Overall: 總共有多少條查詢。 Time range: 查詢執行的時間範圍。 unique: 唯一查詢數量,即對查詢條件進行參數化以後,總共有多少個不同的查詢。 total: 總計 min:最小 max: 最大 avg:平均 95%: 把所有值從小到大排列,位置位於95%的那個數,這個數一般最具有參考價值。 median: 中位元,把所有值從小到大排列,位置位於中間那個數。 Response: 總的回應時間。 time: 該查詢在本次分析中總的時間佔比。 calls: 執行次數,即本次分析總共有多少條這種類型的查詢語句。 R/Call: 平均每次執行的回應時間。 Item : 查詢對象 Databases: 庫名 Users: 各個使用者執行的次數(佔比) Query_time distribution : 查詢時間分布, 長短體現區間佔比,本例中1s-10s之間查詢數量是10s以上的兩倍。 Tables: 查詢中涉及到的表 Explain: 樣本
需要最佳化的對象通常有
1,查詢次數多且每次查詢佔用時間長的sql
用過pt-query-digest分析的前幾個查詢
2,io大的sql
注意pt-query-digest分析中的rows examine項
3,位命中索引的sql
注意pt-query-digest分析中的rows examine和rows send的對比.
MySQL慢查詢日誌的使用