当前位置: 首页 > news >正文

MySql的慢查询(慢日志)

1.什么是慢查询?

慢查询日志,就是查询花费大量时间的日志,是指mysql记录所有执行超过long_query_time参数设定的时间阈值的SQL语句的日志,以帮助开发者分析和优化数据库查询性能。默认情况下,慢查询日志是关闭的,要使用慢查询日志功能,首先要开启慢查询日志功能。

2.如何定位慢SQL?

1、简单版:show profile;

执行 SHOW PROFILE 命令时,它会显示关于服务器线程执行的详细信息,包括每个线程所执行的每个语句的执行时间、I/O 操作、上下文切换等。

注意:通常在开发和问题诊断期间使用,而不是在生产环境中持续启用。

性能开销SHOW PROFILE功能在启用时会对服务器的性能产生额外负担。每当一个查询执行时,MySQL服务器会收集详细的性能信息,包括CPU时间、等待时间、上下文切换次数等。这些信息的收集和存储会消耗额外的CPU和内存资源,这在高并发的生产环境中可能是不可接受的。

-- 启用性能监控
mysql> set profiling=1;-- 执行SQL
mysql> SELECT  *  from  member-- 性能分析
mysql> show profiles;

2.详细版本:performance_schema(不推荐)

--查看performance_schema的属性
mysql> SHOW VARIABLES LIKE 'performance_schema';

通义tongyi.ai_你的全能AI助手-通义千问 (lxblog.com)

3. 开启慢日志

1、查看mysql的慢查询日志是否开启

如果看到slow_query_log的值是OFF,也就是mysql默认是不启用慢查询日志的。

这里还有个long_query_time,默认是10秒,也就是超过了10秒即为慢查询。建议业务配置3秒

log_queries_not_using_indexes,如果设置为ON,则会将所有没有使用索引的查询都记录为慢查询。

2、如何启用慢查询日志呢?

开启慢日志

set global slow_query_log='ON';

-- 持久性,通过配置文件设置
[mysqld]
log_output=FILE,TABLE
slow_query_log=ON
long_query_time=0.001
slow_query_log_file = /usr/local/mysql/mysql-8.0/logs/slow_query.log#一次性的,通过命令设置, long_query_time 是时间阈值。为方便测试,此处认为超过0.001s的就属于慢查询
mysql> SET GLOBAL log_output = 'FILE,TABLE';
mysql> set GLOBAL slow_query_log=ON;
mysql> SET GLOBAL long_query_time = 0.001;
mysql> SET GLOBAL slow_query_log_file = '/usr/local/mysql/mysql-8.0/logs/slow_query.log';

3、指定日志的输出格式

MySQL慢日志支持两种输出格式:TABLE和FILE 日志持久化

1. TABLE格式(推荐):慢日志以表格的形式存储在MySQL数据库中的`slow_log`表中。每个查询都作为一个记录插入到表中,每条记录包含了查询的详细信息,如执行时间、查询语句等。这种格式的主要优点是便于查询和分析,可以直接使用SQL语句对记录进行过滤和聚合操作。通过查询`slow_log`表,可以轻松地获取慢查询信息,比较适合进行简单的查询分析。

2. FILE格式:慢日志以文本文件的形式存储在磁盘上。每条慢日志记录都以一行文本的形式存储,记录中包含了查询的详细信息,如执行时间、查询语句等。这种格式的主要优点是方便日志的传输和存储,可以通过文件操作实现更复杂的查询和分析。通过阅读慢查询日志文件,可以详细了解查询的执行情况,包括执行时间等信息,并进行更深入的分析。

MySQL支持TABLE和FILE两种输出格式,可以用下面的命令来查看当前的输出格式:

show variables like '%log_output%';

设置输出格式:

set global log_output=’FILE’;
set global log_output=’TABLE’;
set global log_output=’FILE,TABLE’;

4、测试

因为我们的超时时间设置为10秒,那么下面这个查询就一定会超时。

select sleep(11);

查看TABLE记录的慢日志:

select * from mysql.slow_log;

初始化慢日志表:TRUNCATE TABLE mysql.slow_log;

这里面记录了查询时间、发起查询的客户端、扫描行数、执行的sql语句等信息。

5.查看FILE记录的慢日志:

先找到日志文件

打开文件,查看记录的内容:

相关文章:

  • 【Echarts地图开发全流程加全套代码】
  • AI时代,程序员会被取代吗?
  • [算法日常] 分层图最短路
  • mock方法内容的匿名方法
  • 关于HTML 案例_个人简历展示02
  • 动手学深度学习(李沐)PyTorch 第 3 章 线性神经网络
  • Jmeter的使用方法
  • python中提示‘pyinstaller‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  • vue3:路由守卫(全局守卫、路由独享守卫、组件内守卫)
  • 15、网络安全合规由来与要素
  • 应用性能管理工具-SkyWalking
  • 目前最好用的爬虫软件是那个?
  • C++游戏
  • 追梦无Bug的软件世界
  • Web3.0 应用项目
  • 网络传输文件的问题
  • 时间复杂度分析经典问题——最大子序列和
  • gitlab-ci配置详解(一)
  • Laravel5.4 Queues队列学习
  • mysql常用命令汇总
  • MySQL的数据类型
  • select2 取值 遍历 设置默认值
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 排序算法学习笔记
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • !$boo在php中什么意思,php前戏
  • # 飞书APP集成平台-数字化落地
  • #前后端分离# 头条发布系统
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (2)nginx 安装、启停
  • (3)选择元素——(17)练习(Exercises)
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (k8s)Kubernetes本地存储接入
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二开)Flink 修改源码拓展 SQL 语法
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (学习总结)STM32CubeMX HAL库 学习笔记撰写心得
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)3D模板阴影原理
  • (转)ORM
  • .Net 6.0 监听Windows网络状态切换
  • .NET CORE Aws S3 使用
  • .NET Core 发展历程和版本迭代
  • .Net Core中Quartz的使用方法
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .net和php怎么连接,php和apache之间如何连接
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET企业级应用架构设计系列之开场白
  • .net中应用SQL缓存(实例使用)