关键词1
关键词101
关键词201
关键词301
关键词401
关键词501
关键词601
关键词701
关键词801
关键词901
关键词1001
关键词1101
关键词1201
关键词1301
关键词1401
关键词1501
关键词1601
关键词1701
关键词1801
关键词1901
问答1
问答101
问答201
问答301
问答401
问答501
问答601
问答701
问答801
问答901
问答1001
问答1101
问答1201
问答1301
问答1401
问答1501
问答1601
问答1701
问答1801
问答1901
懂视1
懂视101
懂视201
懂视301
懂视401
懂视501
懂视601
懂视701
懂视801
懂视901
懂视1001
懂视1101
懂视1201
懂视1301
懂视1401
懂视1501
懂视1601
懂视1701
懂视1801
懂视1901
文库1
文库101
文库201
文库301
文库401
文库501
文库601
文库701
文库801
文库901
文库1001
文库1101
文库1201
文库1301
文库1401
文库1501
文库1601
文库1701
文库1801
文库1901
分类文章1
分类文章101
分类文章201
分类文章301
分类文章401
分类文章501
分类文章601
分类文章701
分类文章801
分类文章901
分类文章1001
分类文章1101
分类文章1201
分类文章1301
分类文章1401
分类文章1501
分类文章1601
分类文章1701
分类文章1801
分类文章1901
个人技术集锦
全部栏目
返回首页
操作系统
后端开发
数据库
前端开发
移动端开发
首页
操作系统
后端开发
数据库
前端开发
移动端开发
您的当前位置:
首页
正文
Mysql慢查询日志过程_MySQL
2020-11-09
来源:个人技术集锦
bitsCN.com
Mysql慢查询日志过程 mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出代码实现中耗费资源的sql语句,对我们程序的优化有很高的参考。本篇主要将慢查询日志的开启,日志分析,这也是优化SQL程序的一般步骤中至关重要的一步。 1.mysql慢查询日志 打开mysql的慢查询日志很简单,只需要在mysql的配置文件里(windows系统是my.ini,linux系统是my.cnf)的[mysqld]下面加上 Java代码 log-slow-queries=mysql_slow.log long_query_time=3 其中log-slow-queries为日志的文件名,可以指定目录,如log-slow-queries=D:/mysql_slow.log; long_query_time为定义多长的查询我们定义为慢查询,并记录在log-slow-queries 指定的文件中,在这里我们定义超过3秒的查询进行记录。 配置完成以后重启Mysql服务器,执行show variables like '%slow%';查看慢查询日志是否开启,如果slow_query_log和log_slow_queries显示为on,那说明服务器的慢查询日志已 经开启了。如下显示: Java代码 mysql> show variables like '%slow%'; +---------------------+----------------+ | Variable_name | Value | +---------------------+----------------+ | log_slow_queries | ON | | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | mysql_slow.log | +---------------------+----------------+ 4 rows in set (0.00 sec) slow_launch_time跟慢查询日志没有任何关系, 它代表的是thread create的一个阈值,如果要看 long_query_time,可以用 Java代码 mysql> show variables like '%long%'; +-----------------+----------+ | Variable_name | Value | +-----------------+----------+ | long_query_time | 3.000000 | +-----------------+----------+ 1 row in set (0.00 sec) 2.mysql慢查询日志分析 建表如下图,建表勿要给text加上索引,否则可能出现不了超过3秒的查询,数据表填充了4194304条数据。
我们来执行一个超过3秒的查询,如下: Java代码 mysql> select * from wei where text='orange'; +---------+--------+ | id | text | +---------+--------+ | 4103519 | orange | +---------+--------+ 1 row in set (3.79 sec) 再执行一个超过3秒的和一个没有超过3秒的: Java代码 mysql> select * from wei where text='xishizhaohua'; Empty set (3.82 sec) Java代码 [mysql> select * from wei where id=4564; +------+--------------------+ | id | text | +------+--------------------+ | 4564 | yyyyyyyyyyyyyyyyyy | +------+--------------------+ 1 row in set (0.02 sec) 可以通过下面的命令查看现在这个session有多少个慢查询:
现在我们可以查看mysql_slow.log(win7默认在C:/ProgramData/MySQL/MySQL Server 5.1/data下面),里边内容如下,内容比较明了,包括查询花费的语句及时间,还包括查询时的时间戳等信息,其中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='orange'; # 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='xishizhaohua'; 3.优化 其实定位到了慢查询语句就已经完成了一大不了,执行explain或者desc命令查看慢查询语句,如下图:
问题很明显,解决方式也很明显,建索引了。 Java代码 mysql> create index text_index on wei(text); Query OK, 4194304 rows affected (1 min 58.07 sec) Records: 4194304 Duplicates: 0 Warnings: 0 然后在执行查询操作,用时明显少了很多。 Java代码 mysql> select * from wei where text='orange'; +---------+--------+ | id | text | +---------+--------+ | 4103519 | orange | +---------+--------+ 1 row in set (0.33 sec) Java代码 mysql> select * from wei where text='xishizhaohua'; Empty set (0.01 sec) bitsCN.com
显示全文