MySQL的慢查询日志

mysql本身支持慢查询日志,可以配置SQL查询超过特定时间的查询记录到日志中。这在优化SQL查询中是非常有效的工具,能够帮助我们快速定位发生问题的SQL。

  慢查询日志常用的变量

 

  long_query_time : 最小值为0,默认为10毫秒,仅记录超过查询时间的SQL,最小粒度为毫秒。

  min_examined_row_limit : 执行查询时扫描过的行数。

  slow_query_log_file : 慢查询日志文件名称

log-output : 慢查询日志存放路径

log_queries_not_using_indexes : 不使用索引的查询记录到慢查询日志

  log_slow_slave_statements : 将集群中的慢查询日志记录到主节点主机慢查询日志中。

   详解慢查询日志的使用

  将日志记录到文件时,最小时间粒度可以为毫秒。但是将日志记录到数据库中的表时,只能记录到整型的秒。所以,慢查询日志多数记录在文件中。

  mysql并不将初始锁定SQL时间当作执行时间,mysqld只有在sql执行完毕,并且释放了所有的锁后,才会将日志写进文件。因此,日志中记录的顺序可能与应用程序实际执行的时间不同。

  默认情况下,慢查询日志是不启用的,所以很多人从来不知道这个玩意。若启用慢查询日志,需要在启动mysql时指定 --slow_query_log[={0|1}]. 如果没有参数或者参数为1,就启用了慢查询日志。当然参数为0的话,就会禁用慢查询日志。指定日志文件名称的话,使用 --slow_query_log_file=file_name。指定日志文件路径的话,使用 --log-output=output_file_name。

  如果没有为慢查询日志指定文件名的话,默认名字是 host_name-slow.log。如果不为日志指定目录的话,这个日志会存放在数据目录下。

  有一点需要的是,如果不为慢查询日志文件找不到目录或者目录不存在的话,即便启用了慢查询日志,也不会记录到慢查询日志文件中。所以,切记指定的慢查询日志目录是一个已经存在的目录。

  如果想要慢查询日志少记点内容的话,可以使用 --log-short-format选项。

  如果想要将管理行为也记录到慢查询日志中,可以使用log_slow_admin_statements变量。它会记录下修改数据表,分析数据表,检查数据表,创建索引,删除索引以及修复数据表等行为。

  如果要在慢查询日志中记录下没有使用索引的查询,可以使用log_queries_not_using_indexes变量。当然这么做,会导致系统的日志增加的特别快。我们可以使用log_throttle_queries_not_using_indexes变量限制记录查询的频率。这个变量的默认值是0,即无限制记录。我们最好设置一个整数如60,只需记录每分钟不使用索引查询的次数即可。

  最后,从数据库缓存中查询的记录不会记录到慢查询日志中。如果一个表没有数据的话,也不会记录到慢查询日志中。集群中的主节点不会将重复的内容记录到慢查询日志中,除非启用 log_slow_slave_statements。

时间: 2024-10-09 22:39:11

MySQL的慢查询日志的相关文章

mysql 通过慢查询日志查写得慢的sql语句

MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启动时,mysqld 会写一个包含所有执行时间超过long_query_time 秒的SQL语句的日志文件,通过查看这个日志文件定位效率较低的SQL . 慢查询日志在查询结束以后才记录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用show processlist命令查看当前MySQL在进行的线程,包括线程的状态.是否锁表等,可以实时地查看SQ

学会读懂 MySql 的慢查询日志

在前边的博客<何时.怎样开启 MySql 日志?>中,我们了解到了怎样启用 MySql 的慢查询日志. 今天我们来看一下怎样去读懂这些慢查询日志.在跟踪慢查询日志之前.首先你得保证最少发生过一次慢查询.假设你没有能够自己制造一个:[email protected]# mysql -e 'SELECT SLEEP(8);上述操作所做的事情仅仅有一个:"睡"(啥也不做)八秒.这个长度应该足以被记录在你的慢查询日志里了(我通常推荐针对长于 2 或 3 秒的查询进行慢查询记录).首

PHP慢脚本日志和Mysql的慢查询日志(转)

1.PHP慢脚本日志 间歇性的502,是后端 PHP-FPM 不可用造成的,间歇性的502一般认为是由于 PHP-FPM 进程重启造成的. 在 PHP-FPM 的子进程数目超过的配置中的数量时候,会出现间歇性的502错误,如果在配置中设置了max_requests的话,超过数量也会出现502错误,而max_requests的设置,正是为了防止不安全的第三方library脚本的 内存泄露 ,当然你自己编写的脚本存在 死锁 的话,也会出现502现象. 如果你发现mysql负载并不高,但是php-fp

使用MySQL的慢查询日志找到低效的SQL语句

如题,要开启mysql的慢查询日志可以在mysql的配置文件中的[mysqld]下设置两项: log-slow-queries = D:/soft/PHPnow/MySQL-5.1.50/test.log         long_query_time = 1 log-slow-queries表示日志册存储位置,long_query_time表示执行时间 单位是秒,这样设置后重启MySQL服务器,查询超过1秒的sql语句将会记录到日志中,需要注意的是log_query_time不能设置小数(经测

MySQL 的慢查询日志

MySQL 的慢查询日志 MySQL 的慢查询日志是 MySQL 提供的一种日志记录,它用来记录在 MySQL 中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的 SQL, 则会被记录到慢查询日志中.long_query_time的默认值为10,意思是运行10s以上的语句. 默认情况下,MySQL数据库并不启动慢查询日志,需要我们手动来设置这个参数, 当然,如果不是调优需要的话,一般不建议启动该参数, 因为开启慢查询日志或多或少会带来一定的性能影响. 慢查询日志支持将

MYSQL开启慢查询日志实施

查看当前服务器是否开启慢查询: 1.快速办法,运行sql语句show VARIABLES like "%slow%" 2.直接去my.conf中查看. my.conf中的配置(放在[mysqld]下的下方加入) [mysqld] log-slow-queries = /usr/local/mysql/var/slowquery.loglong_query_time = 1  #单位是秒log-queries-not-using-indexes 使用sql语句来修改:不能按照my.con

mysql开启慢查询日志

所谓慢查询即一条sql语句的查询时间超过了预定义好的规定查询时间,这些语句是要记录下来做语句优化使用的,下面是如何记录慢查询语句的方法: 1.先查看是否开启慢查询日志功能: mysql> show global variables  like 'slow_query_log'; +----------------+-------+ | Variable_name  | Value | +----------------+-------+ | slow_query_log | OFF   | +-

MySQL 开启慢查询日志

1.1 简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 1.2 登录数据库查看 [[email protected] lib]# mysql –uroot 因为没有设置设置密码,有密码的在 mysql –uroot –p 接密码 1.2.1 进入MySql 查询是否开了慢查询 mysql> show variables like 'slow_query%'; +---------------------+-------

Mysql 配置慢查询日志(SlowQueryLog)以及使用日志分析工具

[ 查看系统关于慢查询的设置 ] mysql> show variables like '%slow%'; +---------------------------+--------------------------------+ | Variable_name | Value | +---------------------------+--------------------------------+ | log_slow_admin_statements | OFF | | log_sl