阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL慢查询日志

277次阅读
没有评论

共计 1341 个字符,预计需要花费 4 分钟才能阅读完成。

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。

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-04/130020.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1341字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中