整理自互聯網!
摘要:
這篇講講慢查詢。在小伙伴們開發的項目中,對於MySQL排查問題找出性能瓶頸來說,最容易發現並解決的問題就是MYSQL的慢查詢以及沒有用索引的查詢.
日志就跟人們寫的日記一樣,記錄着過往的事情。但是人的日記是主觀的(記自己想記的內容),而數據庫的日志是客觀的.
根據記錄內容分為以下好幾種日志:
a、錯誤日志:記錄啟動、運行或停止mysqld時出現的問題。
b、通用日志:記錄建立的客戶端連接和執行的語句。
c、更新日志:記錄更改數據的語句。該日志在MySQL 5.1中已不再使用。
d、二進制日志:記錄所有更改數據的語句。還用於主從復制。
e、慢查詢日志:記錄所有執行時間超過long_query_time秒的所有查詢或不使用索引的查詢。
f、Innodb日志:innodb redo log
缺省情況下,所有日志創建於mysqld數據目錄中。
可以通過刷新日志,來強制mysqld來關閉和重新打開日志文件(或者在某些情況下切換到一個新的日志)。
當你執行一個FLUSH LOGS語句或執行mysqladmin flush-logs或mysqladmin refresh時,則日志被老化。
對於存在MySQL復制的情形下,從復制服務器將維護更多日志文件,被稱為接替日志。
這次我們介紹的就是慢查詢日志。何謂慢查詢日志?
MySQL會記錄下查詢超過指定時間的語句,我們將超過指定時間的SQL語句查詢稱為慢查詢,都記在慢查詢日志里.
我們開啟后可以查看究竟是哪些語句在慢查詢開啟慢查詢日志.
mysql>show variables like “%slow%”; 查看慢查詢配置,沒有則在my.cnf中添加,如下
分析日志 – mysqldumpslow
分析日志,可用mysql提供的mysqldumpslow,使用很簡單,參數可–help查看
推薦用分析日志工具 – mysqlsla
【說明】
queries total: 總查詢次數
unique:去重后的sql數量
sorted by : 輸出報表的內容排序最重大的慢sql統計信息, 包括 平均執行時間, 等待鎖時間, 結果行的總數, 掃描的行總數.
Count:ql的執行次數及占總的slow log數量的百分比.
Time:執行時間, 包括總時間, 平均時間, 最小, 最大時間, 時間占到總慢sql時間的百分比.
95% of Time:去除最快和最慢的sql, 覆蓋率占95%的sql的執行時間.
Lock Time:等待鎖的時間.
95% of Lock :95%的慢sql等待鎖時間.
Rows sent:結果行統計數量, 包括平均, 最小, 最大數量.
Rows examined:掃描的行數量.
Database:屬於哪個數據庫
Users:哪個用戶,IP, 占到所有用戶執行的sql百分比
Query abstract:抽象后的sql語句
Query sample:sql語句