mysql慢查询⽇志路径_mysql的慢查询⽇志
慢查询⽇志概念
MySQL的慢查询⽇志是MySQL提供的⼀种⽇志记录,它⽤来记录在MySQL中响应时间超过阀值的语句,具体指运⾏时间超过
long_query_time值的SQL,则会被记录到慢查询⽇志中。long_query_time的默认值为10,意思是运⾏10S以上的语句。默认情况
下,Mysql数据库并不启动慢查询⽇志,需要我们⼿动来设置这个参数,当然,如果不是调优需要的话,⼀般不建议启动该参数,因为开启慢查询⽇志会或多或少带来⼀定的性能影响。慢查询⽇志⽀持将⽇志记录写⼊⽂件,也⽀持将⽇志记录写⼊数据库表。
相关的参数设置
slow_query_log  :是否开启慢查询⽇志,1表⽰开启,0表⽰关闭。
log-slow-queries :旧版(5.6以下版本)MySQL数据库慢查询⽇志存储路径。可以不设置该参数,系统则会默认给⼀个缺省的⽂件
host_name-slow.log
slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询⽇志存储路径。可以不设置该参数,系统则会默认给⼀个缺省的⽂件host_name-slow.log
mysql下载什么版本的long_query_time:慢查询阈值,当查询时间多于设定的阈值时,记录⽇志。
log_queries_not_using_indexes:未使⽤索引的查询也被记录到慢查询⽇志中(可选项)。
log_output:⽇志存储⽅式。log_output='FILE'表⽰将⽇志存⼊⽂件,默认值是'FILE'。log_output='TABLE'表⽰将⽇志存⼊数据库,这样⽇志信息就会被写⼊到mysql.slow_log表中。MySQL数据库⽀持同时两种⽇志存储⽅式,配置的时候以逗号隔开即可,如:
log_output='FILE,TABLE'。⽇志记录到系统的专⽤⽇志表中,要⽐记录到⽂件耗费更多的系统资源,因此对于需要启⽤慢查询⽇志,⼜需要能够获得更⾼的系统性能,那么建议优先记录到⽂件。
配置
默认情况下slow_query_log的值为OFF,表⽰慢查询⽇志是禁⽤的,可以通过设置slow_query_log的值来开启,如下所⽰
mysql> show variables  like '%slow_query_log%';
局部配置⽅式
开启慢查询⽇志
mysql> set global slow_query_log=1;
使⽤set global slow_query_log=1开启了慢查询⽇志只对当前数据库⽣效,如果MySQL重启后则会失效。如果要永久⽣效,就必须修改配置⽂件myf(其它系统变量也是如此)。例如如下所⽰
配置⽂件开启慢查询⽅式
修改myf⽂件,增加或修改参数slow_query_log 和slow_query_log_file后,然后重启MySQL服务器,如下所⽰
slow_query_log =1
slow_query_log_file=/tmp/mysql_slow.log
关于慢查询的参数slow_query_log_file ,它指定慢查询⽇志⽂件的存放路径,系统默认会给⼀个缺省的⽂件host_name-slow.log(如果没有指定参数slow_query_log_file的话)
那么开启了慢查询⽇志后,什么样的SQL才会记录到慢查询⽇志⾥⾯呢? 这个是由参数long_query_ti
me控制,默认情况下
long_query_time的值为10秒,可以使⽤命令修改,也可以在myf参数⾥⾯修改。关于运⾏时间正好等于long_query_time的情况,并不会被记录下来。也就是说,在mysql源码⾥是判断⼤于long_query_time,⽽⾮⼤于等于。从MySQL 5.1开始,long_query_time开始以微秒记录SQL语句运⾏时间,之前仅⽤秒为单位记录。如果记录到表⾥⾯,只会记录整数部分,不会记录微秒部分。
如上所⽰,我修改了变量long_query_time,但是查询变量long_query_time的值还是10,难道没有修改到呢?注意:使⽤命令 set global long_query_time=4修改后,需要重新连接或新开⼀个会话才能看
到修改值。你⽤show variables like 'long_query_time'查看是当前会话的变量值,你也可以不⽤重新连接会话,⽽是⽤show global variables like 'long_query_time'; 如下所⽰:
在MySQL⾥⾯执⾏下⾯SQL语句,然后我们去检查对应的慢查询⽇志,就会发现类似下⾯这样的信息。
log_output 参数是指定⽇志的存储⽅式。log_output='FILE'表⽰将⽇志存⼊⽂件,默认值是'FILE'。log_output='TABLE'表⽰将⽇志存⼊数据库,这样⽇志信息就会被写⼊到mysql.slow_log表中。MySQL数据库⽀持同时两种⽇志存储⽅式,配置的时候以逗号隔开即可,如:log_output='FILE,TABLE'。⽇志记录到系统的专⽤⽇志表中,要⽐记录到⽂件耗费更多的系统资源,因此对于需要启⽤慢查询⽇志,⼜需要能够获得更⾼的系统性能,那么建议优先记录到⽂件。
系统变量log-queries-not-using-indexes:未使⽤索引的查询也被记录到慢查询⽇志中(可选项)。如果调优的话,建议开启这个选项。另外,开启了这个参数,其实使⽤full index scan的sql也会被记录到慢查询⽇志。
This option does not necessarily mean that no index is used. For example, a query that uses a full index scan uses an index but would be logged because the index would not limit the number of rows.
系统变量log_slow_admin_statements表⽰是否将慢管理语句例如ANALYZE TABLE和ALTER TABLE等记⼊慢查询⽇志
⽇志分析⼯具mysqldumpslow
在⽣产环境中,如果要⼿⼯分析⽇志,查、分析SQL,显然是个体⼒活,MySQL提供了⽇志分析⼯具mysqldumpslow
查看mysqldumpslow的帮助信息:
查看mysqldumpslow的帮助信息。
-s, 是表⽰按照何种⽅式排序,
c: 访问计数
l: 锁定时间
r: 返回记录
t: 查询时间
al:平均锁定时间
ar:平均返回记录数
at:平均查询时间
-t, 是top n的意思,即为返回前⾯多少条的数据;
-g, 后边可以写⼀个正则匹配模式,⼤⼩写不敏感的;
⽐如
得到返回记录集最多的10个SQL。
mysqldumpslow -s r -t 10 /database/mysql/mysql06_slow.log
得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /database/mysql/mysql06_slow.log
得到按照时间排序的前10条⾥⾯含有左连接的查询语句。
mysqldumpslow -s t -t 10 -g “left join” /database/mysql/mysql06_slow.log 另外建议在使⽤这些命令时结合 | 和more 使⽤ ,否则有可能出现刷屏的情况。
⼯作常⽤参数
SHOW PROCESSLIST
查询所有⽤户正在⼲什么
如果出现不顺眼的。可以直接kill [id]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。