MySQL 8.0 架构 之 慢查询日志(Slow query log)(2)流程图:查询记录到慢查询日志中的条件

本文主要是介绍MySQL 8.0 架构 之 慢查询日志(Slow query log)(2)流程图:查询记录到慢查询日志中的条件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • MySQL 8.0 架构 之 慢查询日志(Slow query log)(2)流程图:查询记录到慢查询日志中的条件
    • 确定查询是否会记录在慢查询日志中的流程图
    • 参考

【声明】文章仅供学习交流,观点代表个人,与任何公司无关。
来源|Walt@SQL和数据库技术(ID:SQLplusDB)

MySQL 8.0 OCP (1Z0-908) 考点概要

MySQL 8.0 OCP (1Z0-908) 考点精析-安装与配置考点1:设置系统变量
【MySQL】控制MySQL优化器行为方法之optimizer_switch系统变量
【MySQL】MySQL系统变量(system variables)列表(mysqld --verbose --help的结果例)
【MySQL】MySQL系统变量(system variables)列表(SHOW VARIABLES 的结果例)
MySQL 8.0 OCP (1Z0-908) 考点精析-备份与恢复考点1:MySQL Enterprise Backup概要

MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点1:sys.statement_analysis视图
MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点2:系统变量的确认

MySQL 8.0 性能优化之 EXPLAIN ANALYZE
MySQL 8.0 性能优化之 慢速查询日志(slow query log)
MySQL 8.0 性能优化之 表连接算法(join algorithm)
MySQL 8.0 性能优化之 MySQL Enterprise Monitor之Query Analyzer

MySQL 8.0 架构 之数据字典(Data Dictionary)

MySQL 8.0 InnoDB Tablespaces之System Tablespace(系统表空间)
MySQL 8.0 InnoDB Tablespaces之File-per-table tablespaces(单独表空间)
MySQL 8.0 InnoDB Tablespaces之General Tablespaces(通用表空间/一般表空间)
MySQL 8.0 InnoDB Tablespaces之Temporary Tablespaces(临时表空间)
MySQL 8.0 InnoDB Tablespaces之Undo Tablespaces(UNDO表空间)

【MySQL】在数据目录之外创建InnoDB 表(Creating Tables Externally)

MySQL 8.0 InnoDB 架构之 日志缓冲区(Log Buffer)和重做日志(Redo Log)

MySQL 8.0 架构 之错误日志文件(Error Log)(1)
MySQL 8.0 架构 之错误日志文件(Error Log)(2)
MySQL 8.0 架构 之 通用查询日志(General Query Log)
MySQL 8.0 架构 之 二进制日志文件(Binary log)
MySQL 8.0 架构 之 慢查询日志(Slow query log)

MySQL 8.0 架构 之 慢查询日志(Slow query log)(2)流程图:查询记录到慢查询日志中的条件

MySQL中有多种类型的日志文件,这些日志可用于故障排除、性能调整和审计等目的,帮助找出正在发生的活动。

常见的日志文件包括:

日志类型写入日志的信息
错误日志(Error log)启动、运行或停止mysqld时遇到的问题
二进制日志(Binary log)更改数据的语句(也用于复制)
中继日志(Relay log)从复制源服务器接收到的数据更改
通用查询日志(General query log)已建立的客户端连接和从客户端接收到的语句
慢查询日志(Slow query log)执行时间超过long_query_time秒的查询
DDL日志(元数据日志)(DDL log)DDL语句执行的元数据操作

确定查询是否会记录在慢查询日志中的流程图

我们在下面的文章中介绍了慢速查询日志(slow query log)使用和参数等内容。

MySQL 8.0 架构 之 慢查询日志(Slow query log)

下面是我根据《MySQL 8 Query Performance Tuning》:Figure 9-1. Flowchart to determine whether a query is logged to the slow log一书的内容进行了部分扩展,用于确定SQL查询是否会被记录到慢查询日志中的简化流程图:

在这里插入图片描述
对于查询记录到慢查询日志中的条件,简化的流程如下:

  1. 确认slow_query_log参数是否启用了慢查询日志
  2. 判断SQL的查询类型
  3. 对于管理语句(例如 ALTER TABLE、ANALYZE TABLE、CHECK TABLE、CREATE INDEX、DROP INDEX、OPTIMIZE TABLE、 REPAIR TABLE),确认log_slow_admin_statements参数的设置。
    3.1 如果参数为禁用(OFF),则不记录到慢查询日志
    3.2 如果参数为启用(ON),则进行SQL的执行时间和时间阀值(long_query_time)比较,当小于等于这个时间阀值时不记录到慢查询日志;当执行时间大于时间阀值,进行3.4的判断。
    3.4 SQL语句执行扫描的行数和最小返回行数参数(min_examined_row_limit)进行比较,如果SQL语句执行扫描的行数小于这个参数设置,则不记录到慢查询日志。如果大于参数设置,则记录到慢日志中。
  4. 对于复制相关的语句,确认log_slow_replica_statements (版本>=8.0.26)或者log_slow_slave_statements (版本<8.0.26)参数的设置。
    4.1 如果参数为禁用(OFF),则不记录到慢查询日志
    4.2 如果参数为启用(ON),确认log_queries_not_using_indexes的设置,如果启用判断是否进行了全表扫描,如果SQL语句的执行计划为进行全表扫描,则进行4.4,否则进行4.3的判断。
    4.3 进行SQL的执行时间和时间阀值(long_query_time)比较,当小于等于这个时间阀值时不记录到慢查询日志;当执行时间大于时间阀值,进行4.4的判断。
    4.4 SQL语句执行扫描的行数和最小返回行数参数(min_examined_row_limit)进行比较,如果SQL语句执行扫描的行数小于这个参数设置,则不记录到慢查询日志。如果大于参数设置,则记录到慢日志中。
  5. 对于普通查询语句,首先确认log_queries_not_using_indexes的设置,如果启用判断是否进行了全表扫描,如果SQL语句的执行计划为进行全表扫描,则进行5.1,否则进行5.2的判断。
    5.1 进行SQL的执行时间和时间阀值(long_query_time)比较,当小于等于这个时间阀值时不记录到慢查询日志;当执行时间大于时间阀值,进行4.4的判断。
    5.2 SQL语句执行扫描的行数和最小返回行数参数(min_examined_row_limit)进行比较,如果SQL语句执行扫描的行数小于这个参数设置,则不记录到慢查询日志。如果大于参数设置,则记录到慢日志中。

参考

《MySQL 8 Query Performance Tuning》:Figure 9-1. Flowchart to determine whether a query is logged to the slow log
7.4.5 The Slow Query Log
https://dev.mysql.com/doc/refman/8.0/en/slow-query-log.html

这篇关于MySQL 8.0 架构 之 慢查询日志(Slow query log)(2)流程图:查询记录到慢查询日志中的条件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/795082

相关文章

SQL中redo log 刷⼊磁盘的常见方法

《SQL中redolog刷⼊磁盘的常见方法》本文主要介绍了SQL中redolog刷⼊磁盘的常见方法,将redolog刷入磁盘的方法确保了数据的持久性和一致性,下面就来具体介绍一下,感兴趣的可以了解... 目录Redo Log 刷入磁盘的方法Redo Log 刷入磁盘的过程代码示例(伪代码)在数据库系统中,r

mysql中的group by高级用法

《mysql中的groupby高级用法》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,下面给大家介绍mysql中的groupby用法... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Mysql用户授权(GRANT)语法及示例解读

《Mysql用户授权(GRANT)语法及示例解读》:本文主要介绍Mysql用户授权(GRANT)语法及示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql用户授权(GRANT)语法授予用户权限语法GRANT语句中的<权限类型>的使用WITH GRANT

Mysql如何解决死锁问题

《Mysql如何解决死锁问题》:本文主要介绍Mysql如何解决死锁问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录【一】mysql中锁分类和加锁情况【1】按锁的粒度分类全局锁表级锁行级锁【2】按锁的模式分类【二】加锁方式的影响因素【三】Mysql的死锁情况【1

SQL BETWEEN 的常见用法小结

《SQLBETWEEN的常见用法小结》BETWEEN操作符是SQL中非常有用的工具,它允许你快速选取某个范围内的值,本文给大家介绍SQLBETWEEN的常见用法,感兴趣的朋友一起看看吧... 在SQL中,BETWEEN是一个操作符,用于选取介于两个值之间的数据。它包含这两个边界值。BETWEEN操作符常用

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J