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

MySQL数据库读超时/SELECT查询超时 杂记


本文环境 阿里云RDS MySQL 8.0.34

当客户端向MySQL数据库发送一条SQL之后,由于SQL很慢很慢,它会在什么时候结束呢?
查看 max_execution_time 变量值
mysql> show variables like 'max_execution_time';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_execution_time | 0     |
+--------------------+-------+

查看官方文档

在这里插入图片描述


如果 max_execution_time = 0 则SELECT语句的执行不会超时, 直到查询结果返回.



进行模拟实验, 通过 root 用户登录到数据库.(一个用于查看监控数据,一个用于执行慢查询)
mysql> select * from information_schema.processlist where user='root' order by id asc;
+--------+------+----------------------+------+---------+------+-----------+--------------------------------------------------------------------------------+
| ID     | USER | HOST                 | DB   | COMMAND | TIME | STATE     | INFO                                                                           |
+--------+------+----------------------+------+---------+------+-----------+--------------------------------------------------------------------------------+
| 125901 | root | 183.94.140.242:17228 | NULL | Query   |    0 | executing | select * from information_schema.processlist where user='root' order by id asc |
| 125905 | root | 183.94.140.242:16471 | db1  | Sleep   |   38 |           | NULL                                                                           |
+--------+------+----------------------+------+---------+------+-----------+--------------------------------------------------------------------------------+

接下来在其中一个客户端执行以下语句, 模拟耗时查询

mysql> select * from operation_record where record_id=460156845005578240 and sleep(120);

而在另一个客户端执行如下监控语句(监控数据库连接的情况), 可以看到 ID = 125905 的客户端(即上面那个客户端)在执行耗时查询.

mysql> select * from information_schema.processlist where user='root' order by id asc;
+--------+------+----------------------+------+---------+------+------------+----------------------------------------------------------------------------------+
| ID     | USER | HOST                 | DB   | COMMAND | TIME | STATE      | INFO                                                                             |
+--------+------+----------------------+------+---------+------+------------+----------------------------------------------------------------------------------+
| 125901 | root | 183.94.140.242:17228 | NULL | Query   |    0 | executing  | select * from information_schema.processlist where user='root' order by id asc   |
| 125905 | root | 183.94.140.242:16471 | db1  | Query   |   49 | User sleep | select * from operation_record where record_id=460156845005578240 and sleep(120) |
+--------+------+----------------------+------+---------+------+------------+----------------------------------------------------------------------------------+

经过120秒之后, 查询会正常返回.

我们把以上流程的慢查询语句在 MySQLWorkbench 工具里执行.

在这里插入图片描述
在这里插入图片描述


同样也可以监控到该慢查询
mysql> select * from information_schema.processlist where user='root' order by id asc;
+--------+------+----------------------+------+---------+------+------------+----------------------------------------------------------------------------------------------+
| ID     | USER | HOST                 | DB   | COMMAND | TIME | STATE      | INFO                                                                                         |
+--------+------+----------------------+------+---------+------+------------+----------------------------------------------------------------------------------------------+
| 125901 | root | 183.94.140.242:17228 | NULL | Query   |    0 | executing  | select * from information_schema.processlist where user='root' order by id asc               |
| 125905 | root | 183.94.140.242:16471 | db1  | Sleep   |  687 |            | NULL                                                                                         |
| 125934 | root | 183.94.140.242:16963 | NULL | Sleep   |  232 |            | NULL                                                                                         |
| 125940 | root | 183.94.140.242:17078 | db1  | Query   |   12 | User sleep | select * from operation_record where record_id=460156845005578240 and sleep(120) LIMIT 0, 50 |
+--------+------+----------------------+------+---------+------+------------+----------------------------------------------------------------------------------------------+

可是在经过30秒之后, 客户端收到了错误响应

在这里插入图片描述



而且从监控中也发现少了一个客户端连接(ID = 125940 不见了)

mysql> select * from information_schema.processlist where user='root' order by id asc;
+--------+------+----------------------+------+---------+------+-----------+--------------------------------------------------------------------------------+
| ID     | USER | HOST                 | DB   | COMMAND | TIME | STATE     | INFO                                                                           |
+--------+------+----------------------+------+---------+------+-----------+--------------------------------------------------------------------------------+
| 125901 | root | 183.94.140.242:17228 | NULL | Query   |    0 | executing | select * from information_schema.processlist where user='root' order by id asc |
| 125905 | root | 183.94.140.242:16471 | db1  | Sleep   |  727 |           | NULL                                                                           |
| 125934 | root | 183.94.140.242:16963 | NULL | Sleep   |  272 |           | NULL                                                                           |
+--------+------+----------------------+------+---------+------+-----------+--------------------------------------------------------------------------------+

是因为 MySQLWorkbench 这个工具设置了默认读超时的最大值 30 秒.

在这里插入图片描述

如果把这个默认超时时间设置大于120秒,那么慢查询就可以执行到120秒返回结果,而不会在30秒的时候出现异常了.

需要重新打开一个新的查询窗口或者重新打开MySQLWorkbench工具



有时候,需要控制查询的最大执行时长,可以通过 MAX_EXECUTION_TIME(N) 控制.

在这里插入图片描述

# 设置最大执行时长 10 秒
mysql> select /*+ MAX_EXECUTION_TIME(10000) */ * from operation_record where record_id=460156845005578240 and sleep(120);# 10 秒之后,会返回如下错误
ERROR 3024 (HY000): Query execution was interrupted, maximum statement execution time exceeded


如果客户端不主动断开连接, 如果客户端不主动设置最大执行时长, 而数据库端设置最大执行时长.

把 RDS MySQL max_execution_time 值修改成 60 秒


在这里插入图片描述
客户端重连数据库,再次查看 max_execution_time

mysql> show variables like 'max_execution_time';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_execution_time | 60000 |
+--------------------+-------+

已生效

再次执行慢查询


mysql> select * from operation_record where record_id=460156845005578240 and sleep(120);                           # 60 秒之后,会返回如下错误
ERROR 3024 (HY000): Query execution was interrupted, maximum statement execution time exceeded


【总结】 当一个SQL语句在慢查询的执行过程中
1.如果客户端主动断开连接, 则数据库连接会消失.毕竟断开了连接
2.如果客户端设置了SELECT语句最大执行时长, 则数据库连接依然在, 如果查询耗时超过设置的最大执行时长,语句将被中断,返回给客户端如下错误
ERROR 3024 (HY000): Query execution was interrupted, maximum statement execution time exceeded
3.如果数据库端设置最大执行时长,则数据库连接依然在, 如果查询耗时超过设置的最大执行时长,语句将被中断,返回给客户端如下错误
ERROR 3024 (HY000): Query execution was interrupted, maximum statement execution time exceeded



另外 如果客户端开启一个事务之后, 长时间没有再与数据库有过'沟通', 比如很长时间没有再向数据库发送DML语句, 那么经过 wait_timeout/interactive_timeout 时间之后, 数据库会主动断开该连接, 数据库连接消失,事务会被回滚. 好在客户端的程序都有连接池, 连接池进行活性检测.



个人站点 https://www.infuq.com

相关文章:

MySQL数据库读超时/SELECT查询超时 杂记

本文环境 阿里云RDS MySQL 8.0.34 当客户端向MySQL数据库发送一条SQL之后,由于SQL很慢很慢,它会在什么时候结束呢? 查看 max_execution_time 变量值 mysql> show variables like max_execution_time; --------------------------- | Variable_name | Value | ------…...

docker数据卷:

docker数据卷: 容器和宿主机之间数据共享 容器和宿主机之间数据共享——————挂载卷————容器内的目录和宿主机的目录进行挂载,实现数据文件共享 容器的生命周期有限,一旦重启所有对容器内部文件数据的修改以及保存的数据都会被初始…...

【linux】linux中如何通过systemctl来创建和管理服务

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...

WPF-实现多语言的静态(需重启)与动态切换(不用重启)

目录 一、多语言切换(需重启) 1、配置文件添加Key 2、新增附加属性当前选择语言 3、创建资源文件 4、初始化多语言集合 5、切换多语言并更新配置文件 6、应用程序启动根据配置切换多语言 7、使用 二、多语言切换(无需重启)…...

UE5学习笔记12-为角色添加蹲下的动作

一、一点说明 1.蹲下使用了ACharacter类中Crouch();函数,函数功能是先检查是否存在运动组件,将bool类型的变量变为true,该变量代表是想要蹲下。 2.通过源码可知存在是否蹲下的bool变量bIsCrouched如图,如果对:1有疑问请搜索C位域 …...

【笔记】Android 多用户模式和用户类型

简介 用户界面:System 》Multiple Users 》 开关多用户模式。 一般是不同用户模式下,有修改Settings应用配置的权限差异,因此需要通过用户类型对功能进行判断限制。 代码 通过UserManager可以获取当前用户的信息。 frameworks/base/core/…...

SQL基础——MySQL的索引

简介:个人学习分享,如有错误,欢迎批评指正。 一、概述 介绍 索引是通过某种算法,构建出一个数据模型,用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表&…...

【开发语言】面向对象和面向过程开发思路的区别

引入: 我总结了 面向过程的开发语言思路:1.我要干啥?2.怎么才能实现 面向对象的开发语言思路:1.我要研究谁?2.他能干啥 详解: 面向过程的开发语言思路 我要干啥? 在面向过程的开发中&a…...

谷歌账号登录的时候提示被停用,原因是什么,账号还有救吗?该如何处理?

今日早上,有个久违的朋友找到我说,要恢复账号。 他的情况是这样的:7月21日的时候,他发现自己的谷歌账号登录的时候提示活动异常先,需要输入手机号码验证才能恢复账号。但是输入了自己和亲友们的多个手机号码都无法验证…...

数据库复习笔记

写在最前, 写文章的初衷只是为了复习与记录自己的成长,笔者目前水平还有待提高,文章中难免会出现许多问题与错误,文章内容仅供参考,有不足的地方还请大家多多包涵并指正,谢谢~ 第八章 T-SQL程序结构 8.…...

学习STM32(6)-- STM32单片机ADCDAC的应用

1 引 言 深入了解并掌握STM32F103单片机在模拟数字转换(ADC)和数字模拟转换(DAC)应用方面的功能和操作。学习如何配置STM32F103的ADC模块,实现模拟信号到数字信号的精确转换;同时,探索DAC模块…...

学习记录第二十五天

wait函数 wait函数是一个系统调用&#xff0c;用于等待一个子进程结束并回收其资源。当父进程调用wait函数时&#xff0c;它会暂停执行&#xff0c;直到至少有一个子进程结束。wait函数的原型如下&#xff1a; #include <sys/types.h> #include <sys/wait.h>pid_…...

C语言:字符串函数strcmp

该函数用于比较两个字符串是否一样。 使用方法如下&#xff1a; #include<stdio.h> #include<string.h>int main() {//strcmp函数返回值有三种情况&#xff0c;小于零时返回-1&#xff0c;等于零&#xff0c;大于零时返回1printf("%d\n", strcmp("…...

【数据分析---偏企业】 Excel操作

各位大佬好 &#xff0c;这里是阿川的博客&#xff0c;祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 Excel操作前 必看 Python 初阶 Python—语言基础与…...

Ajax-01.原生方式

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Ajax-原生方式</title> </head> <!-…...

OpenAI GPT-2 model use with TensorFlow JS

题意&#xff1a;使用 TensorFlow JS 应用 OpenAI GPT-2 模型 问题背景&#xff1a; Is that possible to generate texts from OpenAI GPT-2 using TensorFlowJS? 是否可以使用 TensorFlowJS 生成 OpenAI GPT-2 的文本&#xff1f; If not what is the limitation, like mo…...

JVM-运行数据区(堆、栈、元空间)

文章声明&#xff1a;文章图片均来自互联网&#xff0c;因为本人画的图不够生动。 运行数据区是JVM最重要的一个区域。 运行数据区由栈、堆、元空间构成。 栈&#xff1a;程序计数器、JVM虚拟机栈&#xff0c;本地方法栈 本地方法栈&#xff1a;加载native修饰的方法&#…...

超详细!!! LVS(Linux virual server)负载均衡知识及其NAT模式、DR模式、火墙标记实验

目录 前言系统性能扩展方式集群Cluster分布式集群与分布式 四层转发与七层转发的区别 LVS&#xff08;Linux virual server&#xff09;一、LVS介绍LVS相关概念 二、LVS集群结构体系1. 负载均衡层&#xff08;Load Balancer&#xff09;2. 服务器群组层&#xff08;Server Pool…...

信息学奥赛一本通1259:【例9.3】求最长不下降序列

题目&#xff1a; 1259&#xff1a;【例9.3】求最长不下降序列 时间限制: 1000 ms 内存限制: 65536 KB 提交数:51218 通过数: 20928 Special Judge 【题目描述】 设有由n(1≤n≤200)n(1≤n≤200)个不相同的整数组成的数列&#xff0c;记为:b(1)、b(2)、……、…...

星露谷模组开发教程#3 事件

首发于Enaium的个人博客 SMAPI提供了一些事件&#xff0c;比如游戏的内容、显示、输入等事件。这些事件可以让我们在游戏中添加自己的逻辑。这一节我们就来看看如何使用这些事件。 注册一个事件 在SMAPI中&#xff0c;我们可以通过IModHelper的Events属性来注册事件。比如我们…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...