MySQL--慢查询(一)
1. 查看慢查询日志是否开启
show variables like 'slow_query%';
show variables like 'slow_query_log';
参数说明:
1、slow_query_log:这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句。
2、long_query_time:当SQL语句执行时间超过此数值时,就会被记录到日志中。例如设置long_query_time=2,那么就会捕获执行时间超过2秒的语句。
3、slow_query_log_file:记录日志的文件名,例如:slow_query_log_file=/data/mysql/log
4、log_queries_not_using_indexes:这个参数设置为ON,可以捕获到所有未使用索引的SQL语句,尽管这个SQL语句有可能执行得挺快。
如何查找慢SQL?
一、Linux下启用Mysql慢查询
找到配置文件my.conf,一般在/etc/目录下边,配置加在第一行的mysqld下如图:
long_query_time=1 slow-query-log=on slow-query-log-file=/var/lib/mysql/slowquery.log

如果需要的话也可以加上:log_queries_not_using_indexes=on(记录下来没有使用索引的 query,可以根据情况决定是否开启)
上述配置完成后,重启数据库才能生效。
二、show processlist 命令
SHOW PROCESSLIST显示哪些线程正在运行。
各列的含义和用途:
- ID列:一个标识,你要kill一个语句的时候很有用,用命令杀掉此查询 mysqladmin kill 进程号。
- user列:显示单前用户,如果不是root,这个命令就只显示你权限范围内的sql语句。
- host列:显示这个语句是从哪个ip的哪个端口上发出的。用于追踪出问题语句的用户。
- db列:显示这个进程目前连接的是哪个数据库。
- command列:显示当前连接的执行的命令,一般就是休眠(sleep),查询(query),连接(connect)。
- time列:此这个状态持续的时间,单位是秒。
- state列:显示使用当前连接的sql语句的状态,很重要的列,后续会有所有的状态的描述,请注意,state只是语句执行中的某一个状态,一个 sql语句,以查询为例,可能需要经过copying to tmp table,Sorting result,Sending data等状态才可以完成
- info列:显示这个sql语句,因为长度有限,所以长的sql语句就显示不全,但是一个判断问题语句的重要依据。
这个命令中最关键的就是state列,mysql列出的状态主要有以下几种:
Checking table:正在检查数据表(这是自动的)。Closing tables:正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。这是一个很快的操作,如果不是这样的话,就应该确认磁盘空间是否已经满了或者磁盘是否正处于重负中。Connect Out:复制从服务器正在连接主服务器。Copying to tmp table on disk:由于临时结果集大于tmp_table_size,正在将临时表从内存存储转为磁盘存储以此节省内存。Creating tmp table:正在创建临时表以存放部分查询结果。deleting from main table:服务器正在执行多表删除中的第一部分,刚删除第一个表。deleting from reference tables:服务器正在执行多表删除中的第二部分,正在删除其他表的记录。Flushing tables:正在执行FLUSH TABLES,等待其他线程关闭数据表。Killed:发送了一个kill请求给某线程,那么这个线程将会检查kill标志位,同时会放弃下一个kill请求。MySQL会在每次的主循环中检查kill标志位,不过有些情况下该线程可能会过一小段才能死掉。如果该线程程被其他线程锁住了,那么kill请求会在锁释放时马上生效。Locked:被其他查询锁住了。Sending data:正在处理SELECT查询的记录,同时正在把结果发送给客户端。Sorting for group:正在为GROUP BY做排序。Sorting for order:正在为ORDER BY做排序。Opening tables:这个过程应该会很快,除非受到其他因素的干扰。例如,在执ALTER TABLE或LOCK TABLE语句行完以前,数据表无法被其他线程打开。正尝试打开一个表。Removing duplicates:正在执行一个SELECT DISTINCT方式的查询,但是MySQL无法在前一个阶段优化掉那些重复的记录。因此,MySQL需要再次去掉重复的记录,然后再把结果发送给客户端。Reopen table:获得了对一个表的锁,但是必须在表结构修改之后才能获得这个锁。已经释放锁,关闭数据表,正尝试重新打开数据表。Repair by sorting:修复指令正在排序以创建索引。Repair with keycache:修复指令正在利用索引缓存一个一个地创建新索引。它会比Repair by sorting慢些。Searching rows for update:正在讲符合条件的记录找出来以备更新。它必须在UPDATE要修改相关的记录之前就完成了。Sleeping:正在等待客户端发送新请求.System lock:正在等待取得一个外部的系统锁。如果当前没有运行多个mysqld服务器同时请求同一个表,那么可以通过增加--skip-external-locking参数来禁止外部系统锁。Upgrading lock:INSERT DELAYED正在尝试取得一个锁表以插入新记录。Updating:正在搜索匹配的记录,并且修改它们。User Lock:正在等待GET_LOCK()。Waiting for tables:该线程得到通知,数据表结构已经被修改了,需要重新打开数据表以取得新的结构。然后,为了能的重新打开数据表,必须等到所有其他线程关闭这个表。以下几种情况下会产生这个通知:FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE,或OPTIMIZE TABLE。waiting for handler insert:INSERT DELAYED已经处理完了所有待处理的插入操作,正在等待新的请求。
大部分状态对应很快的操作,只要有一个线程保持同一个状态好几秒钟,那么可能是有问题发生了,需要检查一下。还有其他的状态没在上面中列出来,不过它们大部分只是在查看服务器是否有存在错误是才用得着。
举例:下图中是我遇到的实际问题,从下图中可以明显看出,sending data这个状态已经持续了814秒,明显是存在问题的。

三、explain来了解SQL执行的状态
explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。
使用方法:explain sql语句;
例如:explain select surname,first_name form a,b where a.id=b.id
EXPLAIN列的解释:
- table:显示这一行的数据是关于哪张表的
- type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL
- possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句
- key:实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句 中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引
- key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好
- ref:显示索引的哪一列被使用了,如果可能的话,是一个常数
- rows:MYSQL认为必须检查的用来返回请求数据的行数
- Extra:关于MYSQL如何解析查询的额外信息。可以看到的坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢
extra列返回的描述的意义:
Distinct:一旦MYSQL找到了与行相联合匹配的行,就不再搜索了
Not exists: MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,就不再搜索了
Range checked for each Record(index map:#):没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一
Using filesort:看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行
Using index:列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候
Using temporary:看到这个的时候,查询需要优化了。这里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上
Where used:使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题不同连接类型的解释(按照效率高低的顺序排序)
const:表中的一个记录的最大值能够匹配这个查询(索引可以是主键或惟一索引)。因为只有一行,这个值实际就是常数,因为MYSQL先读这个值然后把它当做常数来对待
eq_ref:在连接中,MYSQL在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用
ref:这个连接类型只有在查询使用了不是惟一或主键的键或者是这些类型的部分(比如,利用最左边前缀)时发生。对于之前的表的每一个行联合,全部记录都将从表中读出。这个类型严重依赖于根据索引匹配的记录多少—越少越好
range:这个连接类型使用索引返回一个范围中的行,比如使用>或<查找东西时发生的情况
index:这个连接类型对前面的表中的每一个记录联合进行完全扫描(比ALL更好,因为索引一般小于表数据)
ALL:这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免
type列说明:
表示表的连接类型,性能由好到差的连接类型为 :
system:表中仅有一行,即常量表
const:单表中最多有一个匹配行,例如 primary key 或者 unique index
eq_ref:对于前面的每一行,在此表中只查询一条记录,简单来说,就是多表连接中使用 primary key 或者 unique index
ref:与 eq_ref 类似,区别在于不是使用 primary key 或者 unique index ,而是使用普通的索引
ref_or_null:与 ref 类似,区别在于条件中包含对 NULL 的查询
index_merge:索引合并优化
unique_subquery:in 的后面是一个查询主键字段的子查询
index_subquery:与 unique_subquery 类似,区别在于 in 的后面是查询非唯一索引字段的子查询
range:单表中的范围查询
index:对于前面的每一行,都通过查询索引来得到数据
all:对于前面的每一行,都通过全表扫描来得到数据
相关文章:
MySQL--慢查询(一)
1. 查看慢查询日志是否开启 show variables like slow_query%; show variables like slow_query_log; 参数说明: 1、slow_query_log:这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句。 2、long_query_time:当SQL语句执行…...
【大神支招】3步,打造一张BI报表
随着BI报表的高效直观、灵活分析的特点越来越被大家所熟知,很多BI零基础的用户可积极尝试制作BI报表,以达到灵活自助分析、高效智能分析的效果。那么BI报表零基础的小白们该怎么做BI报表,才能又快又好地做出来? 大神支招…...
【Linux】文件操作
欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析(3) 目录 👉🏻文件是什么?&am…...
(动手学习深度学习)第13章 实战kaggle竞赛:狗的品种识别
文章目录 1. 导入相关库2. 加载数据集3. 整理数据集4. 图像增广5. 读取数据6. 微调预训练模型7. 定义损失函数和评价损失函数9. 训练模型 1. 导入相关库 import os import torch import torchvision from torch import nn from d2l import torch as d2l2. 加载数据集 - 该数据…...
自定义注解+AOP
自定义注解与AOP(面向切面编程)的结合常常用于在应用程序中划定切面,以便在特定的方法或类上应用横切关注点。以下是一个简单的示例,演示了如何创建自定义注解,并使用Spring AOP来在被注解的方法上应用通知。 如何创建…...
Ribbon
在Spring Cloud中,Ribbon是一个用于客户端负载均衡的组件,它可以与其他服务发现组件(例如Eureka)集成,以提供更强大的负载均衡功能。Ribbon使得微服务架构中的客户端能够更加智能地调用其他服务的实例,从而…...
git -1
1.创建第一个仓库并配置local用户信息 git config git config --global 对当前用户所有仓库有效 git config --system 对系统所有登录的用户有效 git config --local 只对某个仓库有效 git config --list 显示配置 git config --list --global 所有仓库 git config --list…...
基于SSM+Vue的鲜花销售系统/网上花店系统
基于SSM的鲜花销售系统/网上花店系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringMyBatisSpringMVC工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 管理员界面 摘要 鲜花销售系统是一个基于SSM(Spring …...
安卓:Android Studio4.0~2023中正确的打开Android Device Monitor
Android Studio4.0~2023 中如何正确的打开Android Device Monitor(亲测有效) 前些天买了新电脑,安装了新版本的Android Studio4.0想试一试,结果就出现了一些问题。 问题引出: Android Device Monitor在工具栏中找不到,后来上网查…...
装备制造企业设备远程运维平台的建设-天拓四方分享
设备远程运维平台是一种基于互联网和物联网技术的设备管理平台,可以实现设备的远程监控、故障诊断、预警维护等功能。近年来,随着云计算、大数据、人工智能等技术的不断发展,设备远程运维平台的智能化程度越来越高,传统的设备运维…...
群晖NAS搭建WebDav服务做文件共享,可随时随地远程访问
文章目录 1. 在群晖套件中心安装WebDav Server套件1.1 安装完成后,启动webdav服务,并勾选HTTP复选框 2. 局域网测试WebDav服务2.1 下载RaiDrive客户端2.2 打开RaiDrive,设置界面语言可以选择中文2.3 点击添加按钮,新建虚拟驱动区2…...
c++调用Lua(table嵌套写法)
通过c调用lua接口将数据存储到虚拟栈中,就可以在lua脚本在虚拟栈中取得数据 c调用lua库,加载lua文件, lua_State* L;//定义一个全局变量***************************L luaL_newstate();luaL_openlibs(L);//打开Lua脚本文件std::string pat…...
算法复杂度分析
文章目录 有数据范围反推算法复杂度以及算法内容一般方法递归 有数据范围反推算法复杂度以及算法内容 c一秒可以算 1 0 7 10^7 107~ 1 0 8 10^8 108次 一般方法 看循环 有几层循环就可以初步分析O( n i n^i ni) 双指针算法除外O(n) 递归 公式法 根据公式的形式࿰…...
几款Java源码扫描工具(FindBugs、PMD、SonarQube、Fortify、WebInspect)
说明 有几个常用的Java源码扫描工具可以帮助您进行源代码分析和检查。以下是其中一些工具: FindBugs:FindBugs是一个静态分析工具,用于查找Java代码中的潜在缺陷和错误。它可以检测出空指针引用、资源未关闭、不良的代码实践等问题。FindBu…...
java springboot测试类鉴定虚拟MVC请求 返回内容与预期值是否相同
上文 java springboot测试类鉴定虚拟MVC运行值与预期值是否相同 中 我们验证了它HTTP的返回状态 简单说 校验了他 是否成功的状态 这次 我们来不对得到的内容 我们 直接改写测试类代码如下 package com.example.webdom;import org.junit.jupiter.api.Test; import org.springf…...
MongoDB随记
MongoDB 1、简单介绍2、基本术语3、shard分片概述背景架构路由功能chunk(数据分片)shard key(分片键值) 4、常用命令 1、简单介绍 MongoDB是一个分布式文件存储的数据库,介于关系数据库和非关系数据库之间,…...
839 - Not so Mobile (UVA)
题目链接如下: Online Judge 这道题刘汝佳的解法极其简洁,用了20来行就解决了问题。膜拜…… 他的解法如下:天平(UVa839紫书p157)_天平 uva 839_falldeep的博客-CSDN博客 我写了两个(都很冗长ÿ…...
php字符串处理函数的使用
php字符串处理函数的使用 trim() trim()函数的功能用于去除字符串首尾的空白字符(包括空格、制表符、换行符等)。它可以用于清理用户输入的数据或去除字符串中的多余空格。 <?php $char" holle world! ";echo trim($char) ?>str_repl…...
UEC++ day8
伤害系统 给敌人创建血条 首先添加一个UI界面用来显示敌人血条设置背景图像为黑色半透明 填充颜色 给敌人类添加两种状态表示血量与最大血量,添加一个UWidegtComponet组件与UProgressBar组件 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category "Enemy …...
学习记录——ipv4、ipv6与ip、DNS、网络协议
文章目录 前情提要:网络协议和域名DNS协议、DNS污染Ipv4、Ipv6NAT协议,IP:端口,环节IP地址枯竭NAT-PT协议,加速Ipv6应用 前情提要: 本文仅做个人的学习记录以及理解,可能存在一些错误。 网络协…...
模型评测为什么一做工具调用基准就开始高分低可用:从 Trajectory Scoring 到 Outcome Verification 的工程实战
🧪 离线分数很好看,为什么线上还是频繁把工具调错 很多团队给模型接入搜索、工单、支付或 CRM 工具后,都会先做一套 tool calling benchmark。表面上看,只要模型把工具名和参数拼对,离线分数就会迅速上涨。⚠️ 可一进…...
调查记者深度采访 实用的律师证人访谈实操技巧
"今天把我跟着资深调查记者打磨的、律师圈常用的2026最新访谈实操技巧整理出来,不管你是做论文调研访谈,还是准备校招面试,都是直接能用的落地方法,解决你记录乱、挖不到料、赶ddl熬大夜的痛点。我踩过这些坑,也见…...
布尔数组位操作优化
以下是针对 布尔数组位操作优化 的系统性、工业级总结,专门为你当前的 16 位错误码 LabVIEW 反转逻辑场景设计。 一、优化目标 将 uint errorCode → bool[16] → Reverse → 循环检查 这个流程,优化为高性能、低分配、可维护的实现。二、优化方案对比表…...
3DMAX模型转Web 3D?用Max2Babylon插件导出glTF的完整避坑指南
3DMAX模型转Web 3D?用Max2Babylon插件导出glTF的完整避坑指南 当设计师需要将精心制作的3DMAX模型搬上网页时,glTF格式正成为Web 3D展示的新标准。但在这个从离线到在线的转换过程中,材质丢失、坐标错乱、动画失效等问题屡见不鲜。本文将深入…...
从零开始做 TikTok,2026 年最新实操攻略
很多朋友私信问我,想做 TikTok 但不知道怎么入门。这里我整理了一套完整的操作流程,按步骤来就行。### 🔑 为什么选择 TikTok 平台? 1. 海量海外用户,覆盖全球主要市场 2. 新号冷启动难度低,内容即流量 3. …...
Navicat连接GaussDB主备版后,这5个高阶功能让数据管理效率翻倍(模型同步/数据迁移实战)
Navicat连接GaussDB主备版后,这5个高阶功能让数据管理效率翻倍 在数据库管理领域,Navicat一直是专业开发者和DBA的首选工具之一。特别是当面对GaussDB主备版这样复杂的企业级数据库环境时,Navicat提供的高阶功能往往能解决实际工作中的痛点问…...
代码审查文化:建设性反馈与知识传播的结合
代码审查文化:建设性反馈与知识传播的结合 在软件开发领域,代码审查(Code Review)早已超越简单的错误检查工具,演变为团队协作与知识共享的核心实践。它不仅是提升代码质量的关键环节,更是促进团队成员技术…...
HarmonyOS 6 Progress组件设置定制内容区使用文档
文章目录 功能概述核心 API1. 接口定义2. 关键类型 完整示例代码结构与功能1. 自定义修饰器类:MyProgressModifier2. 自定义内容构建器:myProgress3. 页面组件:Index 核心特性1. 进度联动2. 样式定制3. 状态感知4. 完全替换原生内容 总结 功能…...
Midscene.js与Playwright融合:企业级自动化测试效率提升88%的智能架构实践
Midscene.js与Playwright融合:企业级自动化测试效率提升88%的智能架构实践 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 副标题:从传统…...
终极Windows热键冲突解决指南:快速定位占用进程的完整教程
终极Windows热键冲突解决指南:快速定位占用进程的完整教程 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是…...
