mysql慢查询

devtools/2024/12/28 11:28:20/

一、通过日志查看慢查询

  • 慢查询就是超出了正常查询时间的语句
1、开启慢查询日志
mysql> set global slow_query_log=1;2、定义时间SQL查询的超时时间(如果某天语句执行时间超过了0.005秒,就定义为慢查询语句)
mysql> set global long_query_time = 0.005;3、查看慢查询日志的保存路径
mysql> show global variables like 'slow_query_log_file';4、查看慢查询内容
# cat /var/log/mysql/slow.log
# Time: 181018 17:26:49                #系统时间
# User@Host: develop[develop] @  [10.0.0.14]  Id: 818826613  #发起慢查询的用户以及从哪台主机发起的慢查询
# Query_time: 5.550443  Lock_time: 0.000037 Rows_sent: 1000  Rows_examined: 1000   #慢查询耗时
use playyx_mobile;          #针对哪个数据库执行的操作
SET timestamp=1539854809;   #时间戳
SELECT * FROM `yx_order` LIMIT 0, 1000;  #慢查询语句内容

mysql_23">二、通过mysql命令查看当前执行的语句中的慢查询

(1)登录进mysql,输入命令
mysql> show processlist;processlist命令的输出结果显示了有哪些线程在运行,可以帮助识别出有问题的查询语句,两种方式使用这个命令。1. 进入MySQL/bin目录下输入mysqladmin processlist;2. 启动mysql,输入show processlist;如果有 SUPER 权限,则可以看到全部的线程,否则,只能看到自己发起的线程(这是指,当前对应的MySQL帐户运行的线程)。得到数据形式如下(只截取了三条):mysql> show processlist;+-----+-------------+--------------------+-------+---------+-------+----------------------------------+----------| Id | User | Host|                        db | Command | Time| State | Info+-----+-------------+--------------------+-------+---------+-------+----------------------------------+----------|207|root |192.168.0.20:51718 |mytest | Sleep | 5 | | NULL|208|root |192.168.0.20:51719 |mytest | Sleep | 5 | | NULL|220|root |192.168.0.20:51731 |mytest |Query | 84 | Locked |select bookname,culture,value,type from book where id=001先简单说一下各列的含义和用途,第一列,id,不用说了吧,一个标识,你要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 已经处理完了所有待处理的插入操作,正在等待新的请求。 大部分状态对应很快的操作,只要有一个线程保持同一个状态好几秒钟,那么可能是有问题发生了,需要检查一下。 还有其他的状态没在上面中列出来,不过它们大部分只是在查看服务器是否有存在错误是才用得着。

三、杀掉慢查询语句

mysqladmin -uroot -p -h 192.168.2.100 -P 3306 kill [pid1,pid2]

http://www.ppmy.cn/devtools/146097.html

相关文章

视频字幕生成工具(类似 MemoAI)简介

视频字幕生成工具,像你提到的那样,利用 机器学习 和 自然语言处理 技术来为视频内容自动生成字幕,并支持多种语言的翻译。这些工具在很多领域中非常有用,尤其是在教育、媒体制作、内容创作和跨语言交流中。 主要功能: 语音识别(ASR): 自动转录:工具首先会识别视频中的…

20.抽卡只有金,带保底(WPF) C#

这是一个界面应用化后的抽卡,目前只能抽金,只有基础概率加保底概率 适合界面化应用初学者。 这是展示图: 使用的是WPF不是winform,我也是第一次做WPF内容,就可以试一试,代码都在这里了,简单来…

三极管恒流源电路

在电子电路设计中,恒流源是一种非常重要的电路,它可以为负载提供稳定的电流,不受负载阻值变化的影响。 本文将详细解析由两个三极管构成的恒流源电路,探讨其工作原理、设计要点以及应用场景。 一、恒流源电路概述 恒流源电路的…

tx-nocache-copy

tx-nocache-copy 是一种网络适配器(NIC)功能,主要用于优化数据包的发送过程,特别是在涉及到大数据量传输时。以下是对 tx-nocache-copy 的详细解释: 1. 定义 tx-nocache-copy:指的是在发送(tran…

数字孪生的建模师blender和maya你更喜欢用哪个?

在数字孪生技术日益成熟的今天,3D建模软件的选择成为了数字孪生建模师们热议的话题。Blender和Maya作为两大主流的3D建模软件,艾斯视觉在数字孪生领域深耕多年:各自拥有独特的优势和广泛的应用领域。本文将从多个维度对比分析Blender和Maya,探…

leetcode 面试经典 150 题:有效的数独

链接有效的数独题序号36题型数组解题方法双层for循环一次遍历法难度中等熟练度✅✅✅ 题目 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1…

一个从oracle使用spool导出数据到kadb的脚本

1. dump_data.sh调用sql_dump.sh导出数据 2. load_data.sh将导出的数据加载至KADB 1. dump_data.sh #!/bin/bash begin_time$(date %Y%m%d -d -1 day) end_time$(date %Y%m%d) echo "数据导出日期:"$begin_time echo "数据导出日期:"$begin_time >>…

《机器学习》KNN算法实现手写数字识别

目录 一、项目介绍 二、数据集介绍 三、需要解决的问题 四、代码实际展示 代码展示 实验结果 五、使用自己的数据进行测试 代码展示 结果展示 六、总结 一、项目介绍 通过对一张2000*1000像素写满0-9手写数字的图片进行处理。分割出训练集和测试集使用KNN算法进行训练…