mysql慢查询日志

mysql慢查询日志对于分析出代码实现中耗费资源(时间)的sql语句有很高的参考价值。可用于优化程序中的SQL语句

1.mysql慢查询日志 
打开mysql的慢查询日志很简单,mysql的配置文件my.cnf(linux系统)[mysqld]下面加上

log-slow-queries=mysql_slow.log  日志的文件名

long_query_time=3   慢查询时间(这里是3s)

查看慢查询日志是否开启,如果slow_query_loglog_slow_queries显示为on,则慢查询日志已经开启了。

如下:

 mysql> show variables like '%slow%';  

 +---------------------+----------------+  

 | Variable_name       | Value          |  

 +---------------------+----------------+  

 | log_slow_queries    | ON             |  

。。。

 | slow_query_log      | ON             |  

 | slow_query_log_file | mysql_slow.log |  

 +---------------------+----------------+  

4 rows in set ( 0.00 sec) 

查看慢查询时间,要看 long_query_time。

如下:

mysql> show variables like '%long%';  

+-----------------+----------+  

| Variable_name   | Value    |  

+-----------------+----------+  

| long_query_time | 3.000000 |  

+-----------------+----------+  

1 row in set ( 0.00 sec)

  2.mysql慢查询日志分析 
 
建表如下图,没有给text字段加上索引,只有主键id有索引,
数据表填充了4194304条数据。

mysql>desc test;


mysql>show index from test;


我们来执行一个慢查询(这里是超过3s),如下:

 mysql> select * from wei where text='apple';  

 +---------+--------+  

 | id      | text   |  

 +---------+--------+  

 4103519 | orange |  

+---------+--------+

1 row in set (3.79 sec) 
再执行一个慢查询的和一个较快的查询的:

mysql> select * from wei where text='banana';  

Empty set (3.82 sec)  

[mysql> select * from wei where id=4567;  

+------+--------------------+  

| id   | text               |  

+------+--------------------+  

4567 | 111111111111111111 |  

+------+--------------------+  

1 row in set (0.02 sec)  

可以通过下面的命令查看现在这个 session 有多少个慢查询:


查看mysql_slow.log,内容包括 1)查询语句 2)花费的时间 3)查询时的时间戳 4)检查的行数Rows_examined
# Time: 121017 17:38:54 
# User@Host: root[root] @ localhost [127.0.0.1] 
Query_time:3.794217 Lock_time: 0.000000 Rows_sent: 1  Rows_examined:4194304 
SET timestamp=1350466734; 
select* from wei where text='apple'; 
# Time: 121017 17:46:22 
# User@Host: root[root] @ localhost [127.0.0.1] 
Query_time:3.819219 Lock_time: 0.000000 Rows_sent: 0  Rows_examined:4194304 
SET timestamp=1350467182; 
select* from wei where text='banana'; 

3.优化 

定位到了慢查询语句后,执行explain或者desc命令查看该慢查询语句的具体信息,如下图:

mysql>desc select * form test where text='banana'

建索引如下:

mysql> create index text_index on test(text);  

Query OK, 4194304 rows affected (1 min 58.07 sec)  

Records:  4194304  Duplicates:  0  Warnings:  0 

建立索引后,查询的时间明显少很多。

 mysql> select * from wei where text='banana';  

 +---------+--------+  

 | id      | text   |  

 +---------+--------+  

 4103519 | banana |  

 +---------+--------+  

1 row in set ( 0.33 sec)

 mysql> select * from wei where text='banana';  

 Empty set (0.01 sec)  


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值