mysql慢查询:
慢查询相关的变量
slow_query_log:该参数控制着慢查询的状态, 1表示开启状态 ,0 表示关闭状态
slow_query_log_file:慢查询日志路径
long_query_time:最大查询阀值,查询的时间超过这个值就视为慢查询并且将其记录到慢查询日志中,慢查询日志路径
通过slow_query_log_file 这个变量设置
log_queries_not_using_indexes:没有使用到索引的查询语句是否记录到慢查询日志中。
log_slow_slave_statements:
log_slow_admin_statements:
与慢查询相关的状态变量:
Slow_queries:慢查询日志文件中查询语句的条数
慢查询日志格式:
# Time: 140919 4:34:28 sql语句执行的时间
# User@Host: root[root] @ [192.168.57.108] Id: 19260444 用户名 和服务器Ip 执行线程Id
# Query_time: 9.556629 Lock_time: 0.000035 Rows_sent: 2606718 Rows_examined: 2606718
查询时间 等待锁的时间 查询到的记录数 索引扫描或表扫描数
SET timestamp=1411072468; # 写入慢查询日志的时间
SELECT /*!40001 SQL_NO_CACHE */ * FROM `cm_players`; # sql 语句
慢查询日志分析:
系统自带的日志分析工具: mysqldumpslow
[root@ldap mysql]# mysqldumpslow --help
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]
Parse and summarize the MySQL slow query log. Options are
--verbose verbose
--debug debug
--help write this text to standard output
-v verbose
-d debug
-s ORDER what to sort by (al, at, ar, c, l, r, t), 'at' is default
al: average lock time
ar: average rows sent
at: average query time
c: count
l: lock time
r: rows sent
t: query time
-r reverse the sort order (largest last instead of first)
-t NUM just show the top n queries
-a don't abstract all numbers to N and strings to 'S'
-n NUM abstract numbers with at least n digits within names
-g PATTERN grep: only consider stmts that include this string
-h HOSTNAME hostname of db server for *-slow.log filename (can be wildcard),
default is '*', i.e. match all
-i NAME name of server instance (if using mysql.server startup script)
-l don't subtract lock time from total time
常用的参数有-s ,-t , -g
-s: 表示排序.可以根据sql的执行次数 c,总的耗时 t,总的锁等待时间 l ,总的返回行数 r ,
默认为降序(c,t,l,r),前面加个一个a就表示升序排序(ac,at,al,ar)
-t:显示前几行
-g:类似于模糊查询
查找包含left join 的sql并且按照总的执行次数排序显示前2条sql语句
[root@ldap mysql]# mysqldumpslow -s c -t 2 -g left join ldap-slow.log
Reading mysql slow query log from join ldap-slow.log
Can't open join: No such file or directory at /usr/bin/mysqldumpslow line 91.
Count: 11294 Time=4.51s (50925s) Lock=0.15s (1659s) Rows=11.1 (125610), EventDev[EventDev]@2hosts
select A.*,AES_DECRYPT(B.playerMobile ,"S") as playerMobile,B.submitBy,B.gameAccount,AES_DECRYPT(B.playerRealName,"S") as playerRealName,B.isVIP,B.gameId,B.gameAreaId,B.gameServerId from cm_sms_send_log A left join cm_events B using(eventId) where A.IsSend=N and A.SmsType !=N order by A.SendId limit N
Count: 858 Time=14.66s (12579s) Lock=0.00s (0s) Rows=26.9 (23072), EventDev[EventDev]@[192.168.119.45]
select a.*,b.cateName,c.tagName,
(select count(*) from cm_event_reasons aa where aa.isDelete=N and aa.ccId like concat(a.ccId,'S')) as subCnt
from cm_event_reasons a left join cm_event_cates b on a.cateId=b.cateId
left join cm_event_tags c on a.tagId=c.tagId
where a.isDelete=N and N order by reasonId limit N,N
参考链接:
多种慢查询分析工具: