慢查詢是mysql中一個非常重要的日志了,我們可以通過mysql慢查詢日志來分析具體導致mysql查詢慢的原因與sql語子,下面就和小編來簡單的學習一下.
慢查詢為系統中查詢時間超過long_query_time的值,分析慢查詢是優化SQL的基礎,默認清下Mysql慢查詢為關閉狀態,可以通過:
show variables where Variable_name = 'log_slow_queries';
來查看是否開啟,如果為OFF則需要修改mysql配置文件,在mysqld下面增加以下參數.
- #慢查詢日志地址,需要mysql運行帳號對該目錄有寫權限
- log-slow-queries="/log/slow.log"
- #當query語句大于2s時記錄慢查詢日志
- long_query_time=2
- #沒有使用索引的query也計入慢查詢日志(可根據情況增加)
- log-queries-not-using-indexes
慢查詢分析
可以使用mysql自帶的mysqldumpslow來進行分析,該命令可帶3個參數.
-s,是表示按照何種方式排序,c、t、l、r分別是按照記錄次數、時間、查詢時間、返回的記錄數來排序,ac、at、al、ar,表示相應的倒敘.
-t,是top n的意思,即為返回前面多少條的數據.
-g,后邊可以寫一個正則匹配模式,大小寫不敏感的.
mysqldum<a href="/fw/photo.html" target="_blank">ps</a>low -s t -t 10 -g "left join" /alidata/log/mysql/slow.log
mysql運行狀態和變量查看
通過查看mysql的status和variables來優化mysql
- mysql> show variables like '%slow%';
- +---------------------+-----------------------------+
- | Variable_name | Value |
- +---------------------+-----------------------------+
- | log_slow_queries | ON |
- | slow_launch_time | 2 |
- | slow_query_log | ON |
- | slow_query_log_file | /alidata/log/mysql/slow.log |
- +---------------------+-----------------------------+
- 4 rows in set (0.00 sec) --Vevb.com
- mysql> show global status like '%slow%';
- +---------------------+-------+
- | Variable_name | Value |
- +---------------------+-------+
- | Slow_launch_threads | 4 |
- | Slow_queries | 3 |
- +---------------------+-------+
- 2 rows in set (0.00 sec)
2、連接數查看,max_connections為允許的最大連接數,Max_used_connections 系統中出現過的最大連接數,據說理想的設置是.
- Max_used_connections / max_connections * 100% ≈ 85%
- mysql> show variables like '%connections%';
- +----------------------+-------+
- | Variable_name | Value |
- +----------------------+-------+
- | max_connections | 2000 |
- | max_user_connections | 0 |
- +----------------------+-------+
- 2 rows in set (0.00 sec)
- mysql> show global status like '%connections%';
- +----------------------+-------+
- | Variable_name | Value |
- +----------------------+-------+
- | Connections | 35049 |
- | Max_used_connections | 12 |
- +----------------------+-------+
- 2 rows in set (0.00 sec)
分析日志?mysqldumpslow
分析日志,可用mysql提供的mysqldumpslow,使用很簡單,參數可?help查看.
- # -s:排序方式。c , t , l , r 表示記錄次數、時間、查詢時間的多少、返回的記錄數排序;
- # ac , at , al , ar 表示相應的倒敘;
- # -t:返回前面多少條的數據;
- # -g:包含什么,大小寫不敏感的;
- mysqldumpslow -s r -t 10 /slowquery.log #slow記錄最多的10個語句
- mysqldumpslow -s t -t 10 -g "left join" /slowquery.log #按照時間排序前10中含有"left join"的
推薦用分析日志工具?mysqlsla
- wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz
- tar zvxf mysqlsla-2.03.tar.gz
- cd mysqlsla-2.03
- perl Makefile.PL
- make
- make install
- mysqlsla /data/mysqldata/slow.log
- # mysqlsla會自動判斷日志類型,為了方便可以建立一個配置文件“~/.mysqlsla”
- # 在文件里寫上:top=100,這樣會打印出前100條結果.
說明:
queries total:總查詢次數 unique:去重后的sql數量
sorted by:輸出報表的內容排序
最重大的慢sql統計信息,包括 平均執行時間,等待鎖時間,結果行的總數,掃描的行總數.
Count,sql的執行次數及占總的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語句
新聞熱點
疑難解答