mysql mysqldumpslow_慢日志分析工具—mysqldumpslow 和 mysqlsla
前提:分析mysql性能的時(shí)候會(huì)查看數(shù)據(jù)庫(kù)的哪些sql語(yǔ)句有問(wèn)題,效率低。這就用到了數(shù)據(jù)庫(kù)的慢查詢,作用就是: 它能記錄下所有執(zhí)行超過(guò)long_query_time時(shí)間的SQL語(yǔ)句,幫你找到執(zhí)行慢的SQL,方便我們對(duì)這些SQL進(jìn)行優(yōu)化。
1.配置慢查詢
在mysql客戶端執(zhí)行
mysql> show variables like "%query%" ;
得到結(jié)果:
設(shè)置慢查詢.png
涉及參數(shù)解釋:
slow_query_log :是否開(kāi)啟慢查詢,ON 開(kāi)啟,OFF關(guān)閉
修改參數(shù)使用命令:
set global slow_query_log=ON; #開(kāi)啟MySQL慢查詢功能
long_query_time :慢查詢時(shí)間設(shè)置,默認(rèn)是10秒
slow_query_log_file :慢查詢?nèi)罩敬娣怕窂?/p>
還可以通過(guò)修改MySQL配置文件參數(shù),開(kāi)啟MySQL慢查詢。vi /etc/my.cnf ,在[mysqld]段添加以下代碼:
slow-query-log = on #開(kāi)啟MySQL慢查詢功能
slow_query_log_file = /data/mysql/127-slow.log #設(shè)置MySQL慢查詢?nèi)罩韭窂?/p>
long_query_time = 5 #修改為記錄5秒內(nèi)的查詢,默認(rèn)不設(shè)置此參數(shù)為記錄10秒內(nèi)的查詢
log-queries-not-using-indexes = on #記錄未使用索引的查詢
:wq! #保存退出
service mysqld restart #重啟MySQL服務(wù)
2.查看慢查詢?nèi)罩?/p>
執(zhí)行sql后就可以看到配置的路徑下面有日志生成了,對(duì)于得到的日志有2中方式可以對(duì)其分析,一是mysql自帶的 mysqldumpslow,另外一個(gè)是要獨(dú)自安裝的 mysqlsla,下面分別介紹一下。
2.1 mysqldumpslow 分析慢查詢?nèi)罩?/p>
執(zhí)行命令:
[root@chances126 /]# mysqldumpslow /var/lib/mysql/mysql-slow.log
得到的信息解釋:
主要功能是, 統(tǒng)計(jì)不同慢sql的
出現(xiàn)次數(shù)(Count),
執(zhí)行最長(zhǎng)時(shí)間(Time),
累計(jì)總耗費(fèi)時(shí)間(Time),
等待鎖的時(shí)間(Lock),
發(fā)送給客戶端的行總數(shù)(Rows),
掃描的行總數(shù)(Rows),
用戶以及sql語(yǔ)句本身(抽象了一下格式, 比如 limit 1, 20 用 limit N,N 表示).
對(duì)我而言,看到返回的這一對(duì)信息,我是崩潰的,也沒(méi)有提示是哪個(gè)數(shù)據(jù)庫(kù)報(bào)的,一般一臺(tái)服務(wù)器有很多數(shù)據(jù)庫(kù),這樣根本看不出來(lái)啊。我不偏愛(ài)這個(gè)工具,雖然他是不用安裝的。
2.2 mysqlsla 分析慢查詢?nèi)罩?/p>
這個(gè)工具需要安裝,看下如何安裝吧。Linux如何安裝 mysqlsla
安裝好后,接下來(lái)就是使用了:
#查詢記錄最多的10條,可以指定具體的數(shù)據(jù)庫(kù)
mysqlsla -lt slow -sort t_sum -sf "+select,update,INSERT" -db hunaniptv -top 10 /var/lib/mysql/mysqld_slow.log
#查詢記錄最多的20個(gè)sql語(yǔ)句,并寫(xiě)到select.log中去
mysqlsla -lt slow --sort t_sum --top 20 /data/mysql/127-slow.log >/tmp/select.log
#統(tǒng)計(jì)慢查詢文件為/data/mysql/127-slow.log的所有select的慢查詢sql,并顯示執(zhí)行時(shí)間最長(zhǎng)的100條sql,并寫(xiě)到sql_select.log中去
mysqlsla -lt slow -sf "+select" -top 100 /data/mysql/127-slow.log >/tmp/sql_select.log
#統(tǒng)計(jì)慢查詢文件為/data/mysql/127-slow.log的數(shù)據(jù)庫(kù)為mydata的所有select和update的慢查詢sql,并查詢次數(shù)最多的100條sql,并寫(xiě)到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
返回參數(shù)解釋:
Count, sql的執(zhí)行次數(shù)及占總的slow log數(shù)量的百分比.
Time, 執(zhí)行時(shí)間, 包括總時(shí)間, 平均時(shí)間, 最小, 最大時(shí)間, 時(shí)間占到總慢sql時(shí)間的百分比.
95% of Time, 去除最快和最慢的sql, 覆蓋率占95%的sql的執(zhí)行時(shí)間.
Lock Time, 等待鎖的時(shí)間.95% of Lock , 95%的慢sql等待鎖時(shí)間.Rows sent, 結(jié)果行統(tǒng)計(jì)數(shù)量, 包括平均, 最小, 最大數(shù)量.
Rows examined, 掃描的行數(shù)量.
Database, 屬于哪個(gè)[數(shù)據(jù)庫(kù)]
Users, 哪個(gè)用戶,IP, 占到所有用戶執(zhí)行的sql百分比
Query abstract, 抽象后的sql語(yǔ)句
Query sample, sql語(yǔ)句
對(duì)于得到這個(gè)信息還可以進(jìn)一步分析,就是登陸到mysql 的客戶端,登陸數(shù)據(jù)庫(kù),執(zhí)行 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表級(jí)別是 ref ,可以進(jìn)一步分析 sql 了。
性能從最好到最差:system、const、eq_reg、ref、range、index和ALL
如果看到性能不好,就可以把sql給研發(fā)去分析了。
總結(jié)
以上是生活随笔為你收集整理的mysql mysqldumpslow_慢日志分析工具—mysqldumpslow 和 mysqlsla的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: memcached 使用 java_使用
- 下一篇: Mysql5换成Mysql8之后报错ja