性能測試過程定性的性能測試經常需要對mysql進行監控以及SQL優化,其中慢sql和索引一直都是
一、通過mysql自帶的日誌查詢
1、最常見的是直接讀取或者使用spotlight、monyog等第三方工具展示slow log。
首先在server端配置開啓slow_log以及時間閾值。修改/etc/my.cnf(該配置在5.6下親測可用),修改完成後重啓mysql服務
slow-query-log=1
slow_query_log_file=/tmp/slow.log
long_query_time=5
1代表開啓,0代表關閉。
5代表記錄大於5秒的。
測試步驟1、SELECT SLEEP(6) FROM DUAL;
2、查看slow.log
# Time: 161107 11:16:37
# User@Host: root[root] @ [XXX.XXX.XXX.XXX] Id: 2
# Query_time: 6.000728 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1478488597;
select sleep(6) from dual LIMIT 0, 1000;
可以看到我們的一個大於5秒閾值的延時查詢已經被記錄下來了。
3、或者可以在一些工具的slow_log中進行記錄。
一般該方法可以配合log_queries_not_using_indexes查詢出慢而且無索引的查詢並且針對起進行索引的建立或者索引類型的優化。
二、通過mysqlsla查詢
安裝mysqlsla
yum -y install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
yum -y install perl-DBI perl-DBD-MySQL
yum -y install perl-CPAN
然後進入perl-cpan
perl -MCPAN -e shell
進入後
cpan > install YAML
cpan > install Time::HiRes
遇到提示則全部輸入yes
下載並上傳解壓mysqlsla
執行make && make install;
啓動遇到錯誤
BEGIN failed--compilation aborted at /usr/local/bin/mysqlsla line 2095.
yum -y install perl-Time-HiRes問題解決。
統計slow.log簡單例子
mysqlsla -lt slow /tmp/slow.log | more
總查詢次數 (queries total), 去重後的sql數量 (unique)
輸出報表的內容排序(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語句
mysqlsla常用參數說明:
1) -log-type (-lt) type logs:
通過這個參數來制定log的類型,主要有slow, general, binary, msl, udl,分析slow log時通過制定爲slow.
2) -sort:
制定使用什麼參數來對分析結果進行排序,默認是按照t_sum來進行排序。
t_sum:按總時間排序
c_sum:按總次數排序
c_sum_p: sql語句執行次數佔總執行次數的百分比。
3) -top:
顯示sql的數量,默認是10,表示按規則取排序的前多少條
4) –statement-filter (-sf) [+-][TYPE]:
過濾sql語句的類型,比如select、update、drop.
[TYPE]有SELECT, CREATE, DROP, UPDATE, INSERT,例如"+SELECT,INSERT",不出現的默認是-,即不包括。
5) db:要處理哪個庫的日誌: