mysql mysqldumpslow_慢日志分析工具—mysqldumpslow 和 mysqlsla
前提:分析mysql性能的時候會查看數據庫的哪些sql語句有問題,效率低。這就用到了數據庫的慢查詢,作用就是: 它能記錄下所有執行超過long_query_time時間的SQL語句,幫你找到執行慢的SQL,方便我們對這些SQL進行優化。
1.配置慢查詢
在mysql客戶端執行
mysql> show variables like "%query%" ;
得到結果:
設置慢查詢.png
涉及參數解釋:
slow_query_log :是否開啟慢查詢,ON 開啟,OFF關閉
修改參數使用命令:
set global slow_query_log=ON; #開啟MySQL慢查詢功能
long_query_time :慢查詢時間設置,默認是10秒
slow_query_log_file :慢查詢日志存放路徑
還可以通過修改MySQL配置文件參數,開啟MySQL慢查詢。vi /etc/my.cnf ,在[mysqld]段添加以下代碼:
slow-query-log = on #開啟MySQL慢查詢功能
slow_query_log_file = /data/mysql/127-slow.log #設置MySQL慢查詢日志路徑
long_query_time = 5 #修改為記錄5秒內的查詢,默認不設置此參數為記錄10秒內的查詢
log-queries-not-using-indexes = on #記錄未使用索引的查詢
:wq! #保存退出
service mysqld restart #重啟MySQL服務
2.查看慢查詢日志
執行sql后就可以看到配置的路徑下面有日志生成了,對于得到的日志有2中方式可以對其分析,一是mysql自帶的 mysqldumpslow,另外一個是要獨自安裝的 mysqlsla,下面分別介紹一下。
2.1 mysqldumpslow 分析慢查詢日志
執行命令:
[root@chances126 /]# mysqldumpslow /var/lib/mysql/mysql-slow.log
得到的信息解釋:
主要功能是, 統計不同慢sql的
出現次數(Count),
執行最長時間(Time),
累計總耗費時間(Time),
等待鎖的時間(Lock),
發送給客戶端的行總數(Rows),
掃描的行總數(Rows),
用戶以及sql語句本身(抽象了一下格式, 比如 limit 1, 20 用 limit N,N 表示).
對我而言,看到返回的這一對信息,我是崩潰的,也沒有提示是哪個數據庫報的,一般一臺服務器有很多數據庫,這樣根本看不出來啊。我不偏愛這個工具,雖然他是不用安裝的。
2.2 mysqlsla 分析慢查詢日志
這個工具需要安裝,看下如何安裝吧。Linux如何安裝 mysqlsla
安裝好后,接下來就是使用了:
#查詢記錄最多的10條,可以指定具體的數據庫
mysqlsla -lt slow -sort t_sum -sf "+select,update,INSERT" -db hunaniptv -top 10 /var/lib/mysql/mysqld_slow.log
#查詢記錄最多的20個sql語句,并寫到select.log中去
mysqlsla -lt slow --sort t_sum --top 20 /data/mysql/127-slow.log >/tmp/select.log
#統計慢查詢文件為/data/mysql/127-slow.log的所有select的慢查詢sql,并顯示執行時間最長的100條sql,并寫到sql_select.log中去
mysqlsla -lt slow -sf "+select" -top 100 /data/mysql/127-slow.log >/tmp/sql_select.log
#統計慢查詢文件為/data/mysql/127-slow.log的數據庫為mydata的所有select和update的慢查詢sql,并查詢次數最多的100條sql,并寫到sql_num.sql中去
mysqlsla -lt slow -sf "+select,update" -top 100 -sort c_sum -db mydata /data/mysql/127-slow.log >/tmp/sql_num.log
得到的信息大概是這種樣子:
mysqlsla分析慢查詢.png
返回參數解釋:
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語句
對于得到這個信息還可以進一步分析,就是登陸到mysql 的客戶端,登陸數據庫,執行 EXPLAIN查看sql具體的 type 信息。
[root@chances126 /]# mysql -uroot -pchances
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 141058
Server version: 5.1.73-log Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use sc_epg_release4
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> EXPLAIN select distinct a.* from EPG_CONTENT_SERIES a join EPG_CATEGORY_ITEM b on a.CONTENT_CODE = b.ITEM_CODE where a.ENABLE_STATUS=1 and b.STATUS=0 and a.EXTERNAL_CODE = '2000000200000010042000000006088';
+----+-------------+-------+------+---------------+-------------+---------+-----------------------------+-------+------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+-------------+---------+-----------------------------+-------+------------------------------+
| 1 | SIMPLE | b | ALL | NULL | NULL | NULL | NULL | 28504 | Using where; Using temporary |
| 1 | SIMPLE | a | ref | seriesIndex | seriesIndex | 387 | sc_epg_release4.b.ITEM_CODE | 1 | Using where |
+----+-------------+-------+------+---------------+-------------+---------+-----------------------------+-------+------------------------------+
2 rows in set (0.00 sec)
mysql>
可以看出 a 表是全表查詢,b表級別是 ref ,可以進一步分析 sql 了。
性能從最好到最差:system、const、eq_reg、ref、range、index和ALL
如果看到性能不好,就可以把sql給研發去分析了。
總結
以上是生活随笔為你收集整理的mysql mysqldumpslow_慢日志分析工具—mysqldumpslow 和 mysqlsla的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: memcached 使用 java_使用
- 下一篇: HTML+CSS+JS实现 ❤️电商商品