mysql慢查询日志
2014-12-26 18:09
106 查看
mysql慢查询日志对于分析出代码实现中耗费资源(时间)的sql语句有很高的参考价值。可用于优化程序中的SQL语句。
1.mysql慢查询日志
打开mysql的慢查询日志很简单,在mysql的配置文件my.cnf里(linux系统)的[mysqld]下面加上
log-slow-queries=mysql_slow.log 日志的文件名
long_query_time=3
慢查询时间(这里是3s)
查看慢查询日志是否开启,如果slow_query_log和log_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)
1.mysql慢查询日志
打开mysql的慢查询日志很简单,在mysql的配置文件my.cnf里(linux系统)的[mysqld]下面加上
log-slow-queries=mysql_slow.log 日志的文件名
long_query_time=3
慢查询时间(这里是3s)
查看慢查询日志是否开启,如果slow_query_log和log_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)
相关文章推荐
- mysqldumpslow 慢查询日志分析工具
- 浅谈MySQL慢查询日志及microslow patch(msl patch)
- mysql在线查询日志
- mysql跟踪记录查询日志
- mysql慢查询日志记录
- MySQL 5.1以下如何动态抓取查询日志
- mysqldumpslow和mysqlsla分析mysql慢查询日志
- MySQL 5.1.6以上版本动态开启慢查询日志 推荐
- 【转】windows下mysql日志开启与查询
- 分析mysql慢查询日志的好工具--mysqlsla
- 使用mysqldumpslow和mysqlsla分析mysql慢查询日志
- mysql日志管理四.慢查询日志
- mysql日志管理三.查询日志
- MYSQL慢查询日志(转)
- mysql开启查看慢查询日志[转]
- mysql打开慢查询日志
- 关于MySQL的慢查询日志
- mysql 查询较慢的日志输出分析模块
- windows下mysql日志开启与查询
- MYSQL:使用慢查询日志定位效率较低的SQL语句