mysql进阶-查询优化-慢查询日志

这篇具有很好参考价值的文章主要介绍了mysql进阶-查询优化-慢查询日志。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是慢查询日志

日志对一个程序来说非常重要,他能帮助程序员在系统出现问题时快速定位问题,慢查询日志slow query log)是MySQL自带的几种日志文件中非常重要的一种日志(另还有错误日志、查询日志、二进制日志)。MySQL的慢查询日志是用于记录执行时间超过指定阈值的SQL查询语句的一种机制。这个阈值由MySQL的参数long_query_time 指定,默认值为10秒。当一个查询的执行时间超过这个阈值时,MySQL就会将这个查询的详细信息记录到慢查询日志中,以供进一步分析和优化使用。慢查询日志可以帮助开发人员和管理员发现查询缓慢或性能低下的SQL查询,以及找出相关的问题和瓶颈。下面将详细介绍MySQL慢查询日志的作用、用途和使用方法。

二、慢查询日志能干什么

2.1 性能分析和优化

慢查询日志可以帮助开发人员和管理员找出执行缓慢或性能低下的SQL查询,从而进行进一步的优化和调整。通过读取日志文件,可以获取SQL查询的具体执行时间和执行次数,以及相应的服务器资源占用情况和响应时间等指标,从而确定查询语句的瓶颈和性能问题所在,并根据实际执行计划进行优化,以提高查询性能和执行效率。

2.2 诊断和排查问题

慢查询日志可以用于诊断和排查数据库中的各种问题和异常。例如,可以通过查询日志文件,找出导致数据库响应时间延长的查询语句、语法错误、索引缺失等问题,并针对性地进行解决和优化,从而提高数据库的可用性和稳定性。

2.3 数据分析和探索

慢查询日志可以作为数据库性能的一种指标进行分析和探索。通过对日志文件的分析,可以研究数据库操作的历史记录、访问模式、查询分布等重要特征,从而深入了解数据库的运行状况和性能瓶颈,帮助开发人员和管理员进行针对性的优化和调整,以提升数据库的性能和可靠性。

三、慢查询日志实战

3.1 永久开启开启慢查询日志

要开启MySQL慢查询日志,需要修改MySQL服务器的配置文件my.cnf(my.ini),
mysql的配置文件路径:

  • linux路径
/etc/mysql/my.cnf
  • windows路径 5.7 是版本号
C:\ProgramData\MySQL\MySQL Server 5.7/my.ini

也可以通过命令行的形式进行查询目录:

show variables like '%slow_query_log%'; 

mysql进阶-查询优化-慢查询日志
mysql进阶-查询优化-慢查询日志

并添加如下配置信息, 如果路径不存在一定要手动创建,否者可能会因为权限不够,无法记录慢查询日志。

# 开启慢查询日志
slow_query_log = 1 

# 指定慢查询的阈值,默认为10秒
long_query_time = 10 

# 指定慢查询日志的保存位置
slow_query_log_file = /var/log/mysql/mysql-slow.log

其中,slow_query_log为开启慢查询日志的开关,1为开启,0为关闭。long_query_time为慢查询的阈值时间,单位为秒,默认情况下为10秒。最后,slow_query_log_file为慢查询日志文件的保存位置,也可以指定文件名。

完成配置后,需要重启MySQL服务器才能使配置生效。

3.2 临时开启慢查询日志

我们也可以在命令行,或者Navicat 中执行如下命令开启慢查询日志:

SET GLOBAL slow_query_log = 1;
SET GLOBAL slow_query_log_file = '/mysql-slow.log';
SET GLOBAL long_query_time = 10;
SET GLOBAL log_output = 'FILE';

  • 优点:不需要重启mysql,不区分系统,简单方便
  • 缺点:重启mysql配置就失效了。

3.4 常用命令

# 查看慢查询日志的完整路径和文件名
show variables like 'slow_query_log_file'; 

# 查看当前MySQL服务器的慢查询日志是否开启
show variables like 'slow_query_log';

# 查询慢查询的阈值
show variables like '%long_query_time%'; 

# 查询慢查询日志输出方式
show variables like '%log_output%'; 


四、如何分析慢查询日志

mysqldumpslow 工具是慢查询自带的分析慢查询工具,一般只要安装了mysql,就会有该工具。
完成语法如下:

Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]  -- 后跟参数以及log文件的绝对地址;

  -s            what to sort by (al, at, ar, c, l, r, t), 'at' is default
                al: average lock time
                ar: average rows sent
                at: average query time
                c: count
                l: lock time
                r: rows sent
                t: query time

  -r           reverse the sort order (largest last instead of first)
  -t NUM       just show the top n queries
  -a           don't abstract all numbers to N and strings to 'S'
  -n NUM       abstract numbers with at least n digits within names
  -g PATTERN   grep: only consider stmts that include this string
  -h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard),
               default is '*', i.e. match all
  -i NAME      name of server instance (if using mysql.server startup script)
  -l           don't subtract lock time from total time

mysqldumpslow 命令 常见的分析和优化查询日志文件语句如下:

取出使用最多的10条慢查询

mysqldumpslow -s c -t 10 /var/log/mysql/mysql-slow.log 

取出查询时间最慢的3条慢查询

mysqldumpslow -s t -t 3 /var/log/mysql/mysql-slow.log  

得到按照时间排序的前10条里面含有左连接的查询语句

mysqldumpslow -s t -t 10 -g “left join/var/log/mysql/mysql-slow.log 

按照扫描行数最多的前10条语句

 mysqldumpslow -s r -t 10 -g 'left join' /var/log/mysql/mysql-slow.log  

按查询总时间排序,显示前10条查询信息

mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log 

查询次数排序,显示前20条查询信息

mysqldumpslow -s c -t 20 /var/log/mysql/mysql-slow.log 

其中,-s t 表示按查询总时间排序,-s c表示按查询次数排序,-t 10表示显示前10条查询信息。

widows下使用mysqldumpslow 可以参考:Windows下安装使用mysqldumpslow

五、优化慢查询语句

通过分析和统计MySQL慢查询日志文件,可以找出不同查询语句的执行时间和执行次数等指标,以便进一步优化和调整查询语句的性能和执行效率。优化的方法通常包括以下几个方面:

(1)添加或修改表索引,以提高查询速度。

(2)优化SQL查询语句,使用优化的SQL语句可以使查询性能得到提升。

(3)调整MySQL服务器参数,如增加缓存区大小、减少线程数等,以达到更好的性能优化效果。

(4)升级数据库版本,选择更高效的数据库版本可以对查询性能产生显著影响。

五、总结

MySQL慢查询日志是MySQL数据库优化和性能调整的重要工具之一,通过记录和分析执行缓慢的SQL查询语句,可以找出查询瓶颈和性能问题所在,并针对性地进行优化和调整。尽管慢查询日志会产生一定的系统负担和日志存储量,但是它对于开发人员和管理员来说确实是一种非常有价值的工具,可以大幅提高MySQL性能的稳定性和可靠性。文章来源地址https://www.toymoban.com/news/detail-438091.html

到了这里,关于mysql进阶-查询优化-慢查询日志的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL日志——慢查询日志

    默认情况下,不会记录管理语句,也不会记录不使用索引进行查找的查询。可以 使用log_slow_admin_statements和更改此行为log_queries_not_using_indexes,如下所述。 查看慢查询日志文件

    2024年02月14日
    浏览(37)
  • MySQL物理文件----日志文件(错误日志、通用查询日志、二进制日志、慢查询日志)

    MySQL 错误日志记录 MySQL 运行过程中较为严重的警告和错误信息,以及 MySQL 每次启动和关闭的详细信息。 MySQL 错误日志默认是开启的。可以通过 MySQL 配置文件中的 log-error=/var/log/mysqld.log 配置,修改错误日志的配置信息。 可以通过如下 SQL 查看错误日志的详细信息: show vari

    2024年02月15日
    浏览(52)
  • 性能分析之MySQL慢查询日志分析(慢查询日志)

            MySQL的慢查询日志是MySQL提供的一种日志记录,他用来记录在MySQL中响应的时间超过阈值的语句,具体指运行时间超过long_query_time(默认是10秒)值的SQL,会被记录到慢查询日志中。         慢查询日志一般用于性能分析时开启,收集慢SQL然后通过explain进行全面

    2024年02月12日
    浏览(58)
  • 【MySQL学习】MySQL的慢查询日志和错误日志

    ꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶ 个人主页:xiaoxieʕ̯

    2024年04月11日
    浏览(51)
  • Windows系统C盘空间优化进阶:磁盘清理与Docker日志管理

    Windows系统C盘空间优化进阶:磁盘清理与Docker日志管理 当您的Windows系统C盘空间告急时,除了深入挖掘并清理隐藏的大文件,如Docker日志外,不要忽视了Windows自带的“磁盘清理”工具。这是一个强大的工具,可以帮助您释放磁盘空间,让系统运行更加流畅。以下是如何结合使

    2024年04月09日
    浏览(54)
  • 【MySQL】进阶查询-聚合查询和联合查询

    文章主要围绕着以下三个问题: group by的作用 where与having的区别 表的连接分为哪些,分别是什么作用 在创建数据表时,我们通常时根据需求找到\\\"实体\\\", 梳理\\\"实体\\\"之间的关系,从而进行创建. \\\"实体\\\"之间可能会有以下几种关系:1.没关系 2.一对一 3.一对多 4.多对多. 没关系应该是最好

    2023年04月11日
    浏览(68)
  • mysql 操作慢查询日志

    1、mysql 批量插入300w数据 2、慢查询日志的时间 3、设置慢查询日志存放方式,分为文件和表两种形式 og_output参数是什么意思?表示慢日志输出到文件还是表中。 show global variables like \\\'log_output\\\'; 默认参数,log_output=\\\'FILE\\\',表示慢日志输出到了文件中。 set global log_output=\\\'TABLE\\\';

    2024年02月08日
    浏览(46)
  • MySQL----日志查询、备份与恢复

    MySQL 的日志默认保存位置为 /usr/local/mysql/data vim /etc/my.cnf [mysqld] ##错误日志,用来记录当MySQL启动、停止或运行时发生的错误信息,默认已开启 log-error=/usr/local/mysql/data/mysql_error.log #指定日志的保存位置和文件名 ##通用查询日志,用来记录MySQL的所有连接和语句,默认是关闭的

    2024年02月09日
    浏览(48)
  • [MySQL]复杂查询(进阶)

    专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来!  1.新增 2. 聚合查询 2.1 聚合函数 3. 分组查询(grop by) 4. ha

    2024年02月16日
    浏览(32)
  • 【MySQL】查询进阶

    对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1。 即在设定主键约束后加 auto_increment 在数据库中,外键约束(Foreign Key Constraint)用于建立表与表之间的关系,通过将一个表的列与另一个表的主键或唯一键相关联来定义这种关

    2024年02月16日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包