问题整理【2024-04-08】

news2024/11/17 1:46:53

一、关于MYSQL死锁问题

1.1 源由

一次上线过程中,遇到了MySQL死锁的问题……

1.2 分析

1.2.1 前置知识

​ 首先要知道,MySQL是一个多线程的数据库管理系统,查询是通常并发执行的,可以同时处理多个查询请求,并且MySQL中的更新、删除等操作也可以并发执行,需要注意的是,并发执行更新和删除操作可能会引起数据不一致或意外的结果,特别是在涉及到相同数据的同时修改时。为了避免这种情况,MySQL提供了事务和锁机制来确保数据的一致性和完整性。

1.2.2 解决死锁问题相关命令汇总
1、show processlist;

参考文章

十分感谢如下文章提供的帮助

https://blog.csdn.net/WUFUSHANLI/article/details/124399079

说明

SHOW PROCESSLIST是 MySQL 中用于显示当前正在运行的线程(也称为进程)的命令。这些线程可能包括查询、事务、复制线程等。使用 SHOW PROCESSLIST 可以查看当前 MySQL 服务器上正在执行的活动,以及它们的状态、执行时间等信息。

结果说明

字段名称说明
Id线程的唯一标识符(即系统分配的"connection_id",可以使用函数connection_id()查看:select connection_id())
User连接 MySQL 服务器的用户名,可通过select user()查看当前连接到 MySQL 服务器的用户名(补充:如果需要查看当前所有连接到 MySQL 服务器的用户信息,可以使用SELECT User FROM information_schema.processlist命令)
Host连接 MySQL 服务器的主机名(详细到ip和端口,可用于跟踪出对应的用户)
db线程正在操作/连接的数据库。如果是 NULL,则表示没有指定数据库
Command线程正在执行的命令类型
Time线程执行的时间,以秒为单位
State线程的当前状态,是参考sql状态的重要依据
Info正在执行的 SQL 查询或操作的信息

相关参数详细说明(可在遇到时自行查阅相关资料,这里只是做一个搬运,如有错误,欢迎纠正):

(1)Command中常见命令及其含义说明

  • Query:正在执行一个 SQL 查询
  • Sleep:现成正在等待客户端请求
  • Connect:线程正在建立一个新的连接
  • Killed:线程已被终止
  • Quit:线程正在关闭连接
  • Daemon:通常表示该线程是一个后台守护进程,负责处理一些后台任务,而不是响应客户端的请求

(2)State中常见命令及其含义说明

  • Checking table

正在执行表的检查操作(自动执行)

一般在索引重建、事务回滚、数据恢复、内部维护任务、其他管理操作会执行表的检查工作,这些操作通常是为了确保数据的完整性、一致性和可用性。

  • Closing tables

表示 MySQL 正在处理结束的操作,将表中修改的数据刷新到磁盘中,关闭已经打开的表,以便释放资源并维护数据库的一致性。

  • Connect Out

表示服务器正在尝试与其他 MySQL 服务器建立连接

  • 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 已经处理完了所有待处理的插入操作,正在等待新的请求

  • Waiting for net, reading from net, writing to net

偶尔出现无妨

具体示例

在这里插入图片描述

通过show processlist执行可以看到此时MySQL中正有三个线程:

首先第一个线程是由事件调度器(event_scheduler)创建的,事件调度器是 MySQL 的一个功能,用于执行预定的任务或事件。当事件触发时,事件调度器会创建一个线程来执行该事件,例如定时清理数据库、备份数据等。

第二个线程是一个查询操作,其连接的数据库是tlias,命令正式此时我们在查询线程信息的show processlist。

第三个线程正处于一个睡眠状态,连接的数据库是ynw。

2、查看锁的状态
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; 
3、杀死对应的线程
kill 线程号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1595154.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文献阅读:LESS: Selecting Influential Data for Targeted Instruction Tuning

文献阅读:LESS: Selecting Influential Data for Targeted Instruction Tuning 1. 文章简介2. 方法介绍 1. Overview2. 原理说明 1. SGD上的定义2. Adam上的定义 3. 具体实现 1. Overview1. LoRA使用2. 数据选择3. LESS-T 3. 实验考察 & 结论 1. 实验设计2. 主…

SPI 设备驱动编写流程:创建SPI节点以及SPI设备节点(在设备树文件中)

一. 简介 SPI 驱动框架和 I2C 很类似,都分为主机控制器驱动和设备驱动。 SPI主机控制器的驱动一般是芯片半导体厂商写好了,我们要编写的是SPI设备驱动代码。 本文开始来学习SPI设备驱动的编写流程(前提是支持设备树的情况)。 二…

Google最新论文: 复杂的 Prompt 如何更好的调试?

本文介绍了Sequence Salience,这是一个专为调试复杂的大模型提示而设计的系统。该系统利用广泛使用的显著性方法,支持文本分类和单标记预测,并将其扩展到可处理长文本的调试系统。现有的工具往往不足以处理长文本或复杂提示的调试需求。尽管存…

bugku-web-文件上传

提示他的名字是margin,给他一个图片文件,不要php文件 上传一句话木马的图片 抓包,后缀改为php 提示无效文件,即后台还会检测一次后缀 测试后台系统 为linux系统 开始绕过 截断绕过 上传成功,但是会变为jpg 开始分析…

黑马苍穹外卖--再来一单(stream流转换、赋值与收集映射)

1.首先明确一下业务规则: 业务规则: 再来一单就是将原订单中的商品重新加入到购物车中 2.产品页面原型和开发接口文档 3.业务层逻辑代码开发 3.1 查询方向 我们要明确的是: 再来一单就是将原订单中的商品重新加入到购物车中------直接把商品加入到购物车&#…

Jmeter三个常用组件

Jmeter三个常用组件 一、线程组二、 HTTP请求三、查看结果树 线程组:jmeter是基于线程来运行的,线程组主要用来管理线程的数量,线程的执行策略。 HTTP请求:HTTP请求是jmeter接口测试的核心部分,主要使用HTTP取样器来发…

微信小程序实现预约生成二维码

业务需求&#xff1a;点击预约按钮即可生成二维码凭码入校参观~ 一.创建页面 如下是博主自己写的wxml&#xff1a; <swiper indicator-dots indicator-color"white" indicator-active-color"blue" autoplay interval"2000" circular > &…

pyqt和opencv结合01:读取图像、显示

在这里插入图片描述 1 、opencv读取图像用于pyqt显示 # image cv2.imread(file_path)image cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 将图像转换为 Qt 可接受的格式height, width, channel image.shapebytes_per_line 3 * widthq_image QImage(image.data, width, hei…

2440栈的实现类型、b系列指令、汇编掉用c、c调用汇编、切换工作模式、初始化异常向量表、中断处理、

我要成为嵌入式高手之4月11日51ARM第六天&#xff01;&#xff01; ———————————————————————————— b指令 标签&#xff1a;表示这条指令的名称&#xff0c;可跳转至标签 b指令&#xff1a;相当于goto&#xff0c;可随意跳转 如&#xff1a;fini…

Finetuning vs. Prompting:大语言模型两种使用方式

目录 前言1. 对于大型语言模型的两种不同期待2. Finetune(专才)3. Prompt(通才)3.1 In-context Learning3.2 Instruction-tuning3.3 Chain of Thought(COT) Prompting3.4 用机器来找Prompt 总结参考 前言 这里和大家分享下关于大语言模型的两种使用方式&#xff0c;一种是 Fine…

Spring Boot | Spring Boot中进行 “文件上传” 和 “文件下载”

目录: 一、SpringBoot中进行 " 文件上传" :1.编写 "文件上传" 的 “表单页面”2.在全局配置文件中添加文件上传的相关配置3.进行文件上传处理&#xff0c;实现 "文件上传" 功能4.效果测试 二、SpringBoot中进行 "文件下载" :“英文名称…

geekos project3 代码记录

1.解压缩 sudo tar zxvf bochs-2.6.8.tar.gz2.进入到bochs目录 cd /home/xiongzhuo/bochs-2.6.8 3.安装bochs sudo ./configure --enable-debugger --enable-disasm遇到问题&#xff1a;解决第一个的时候卡在第二个上 configure: error: C preprocessor "/lib/cpp&quo…

CDP7 下载安装 Flink Percel 包

下载链接&#xff1a;https://www.cloudera.com/downloads/cdf/csa-trial.html 点击后选择版本&#xff0c; 然后点击download now&#xff0c;会有一个协议&#xff0c;勾选即可&#xff0c;然后就有三个文件列表&#xff0c; 我这里是已经注册登录的状态&#xff0c;如果没…

Form表单控件主要标签及属性。name属性,value属性,id属性详解。表单内容的传递流程,get和post数据传递样式。表单数据传递实例

form表单 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> &…

【板栗糖GIS】如何给微软拼音输入法加上小鹤双拼

【板栗糖GIS】如何给微软拼音输入法加上小鹤双拼 用过在注册表里新建的方法&#xff0c;结果弄完没有出现小鹤双拼方案&#xff0c;想到了自己写reg表 目录 1. 新建一个txt文件 2. 把.txt的后缀名改成.reg&#xff0c;双击运行 3. 在设置中找到微软输入法-常规 1. 新建一个…

做一个后台项目的架构

后台架构的11个维度 架构1&#xff1a;团队协助基础工具链的选型和培训架构2&#xff1a;搭建微服务开发基础设施架构3&#xff1a;选择合适的RPC框架架构4&#xff1a;选择和搭建高可用的注册中心架构5&#xff1a;选择和搭建高可用的配置中心架构6&#xff1a;选择和搭建高性…

Towards IP Geolocation Using Delay and TopologyMeasurements(TBG)(2006年)

下载地址:Towards IP geolocation using delay and topology measurements | Proceedings of the 6th ACM SIGCOMM conference on Internet measurement 被引次数:492 Katz-Bassett E, John J P, Krishnamurthy A, et al. Towards IP geolocation using delay and topology …

【GD32】AD9833模块 DDS模块 提供测试程序 正弦波/方波/三角波信号发生器

2.45 AD9833 DDS模块 2.45.1 模块来源 采购链接&#xff1a; AD9833模块 DDS模块 提供测试程序 正弦波/方波/三角波信号发生器 资料下载&#xff1a; https://pan.baidu.com/s/1JZ0ga4uTyXUq5u-Or9BVlg?pwdGOOD 提取码&#xff1a;GOOD 2.45.2 规格参数 工作电压&#xff1…

(七)PostgreSQL的用户管理

PostgreSQL的用户管理 1 创建用户&#xff08;角色&#xff09; CREATE USER现在是CREATE ROLE的别名。唯一的区别是&#xff0c;当命令的拼写为CREATE USER时&#xff0c;默认情况下会使用LOGIN&#xff0c;而当命令拼写为CREATE ROLE时会使用NOLOGIN。 官方文档&#xff1a…

MyBatis-Spring整合

引入Spring之前需要了解mybatis-spring包中的一些重要类&#xff1b; http://www.mybatis.org/spring/zh/index.html 什么是 MyBatis-Spring&#xff1f; MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。 知识基础 在开始使用 MyBatis-Spring 之前&#x…