MySQL 使用Navicat delete/insert into/update 大量数据表锁死,kill的线程后线程处于killed状态问题解决
MySQL 使用delete/insert into/update 大量数据表锁死,kill的线程后线程处于killed状态问题解决
- 实际生产环境问题描述:
- 使用Navicat备份BigData数据表时不小心点到了取消按钮,导致数据表被锁。
- 查看MySQL线程队列,找到刚刚执行的SQL看是属于什么状态。
show processlisth
- 或使用下列语句查看具体情况
select * from information_schema.processlist where time>500;
字段说明:
Id # 连接标识符。这ID与INFORMATION_SCHEMA PROCESSLIST表列中显示的PROCESSLIST_ID值、Performance Schemathreads 表列中显示的CONNECTION_ID()值以及线程内函数返回的值相同。
User # MySQL 用户
Host # 发出语句的客户端的主机名(除了system user没有主机的 )
db # 线程的默认数据库
Command # 线程代表客户端执行的命令类型,或者Sleep会话是否空闲。
Time # 线程处于当前状态的时间(以秒为单位)。对于副本 SQL 线程,该值是上次复制事件的时间戳与副本主机的实时时间之间的秒数。
State # 指示线程正在执行的操作的操作、事件或状态。
Info # 线程执行的sql语句,如果没有语句执行则为null。这个语句可以使客户端发来的执行语句也可以是内部执行的语句w我这里
- 我这里的Command状态当时是Killed状态:
- 因为我Show processlisth 之后kill id 掉了insert into进程,由于数据量过大,kill后处于等待状态(因为数据表是处于锁定状态)找了老半天才找到问题他喵的竟然触发了事务,导致数据回滚。当前线程一直停不下来。
- 提示:
生产环境一切留心眼,不要找不到问题就reboot DB. 因为重启MySQL后进程虽然会消失但锁依然存在!因为回滚还要继续,为了保证数据的一致性。
- 但是盲目的等待锁释放心里没底,所以我们可以通过下面的方式计算出这个锁什么时候能够释放,我们就可以使用表
查看innodb事务信息表
说明: trx_rows_modified: 代表锁影响的行数,当数值为0时,锁将会释放。其中trx_rows_locked值不用关注。
SELECT * FROM information_schema.INNODB_TRX;
# 查看内部执行的每个事务的信息,包括事务是否正在等待锁定、事务何时开始以及事务正在执行的 SQL 语句(如果有) # SELECT * FROM information_schema.INNODB_TRX; ......
*************************** 91. row ***************************
trx_id: 994701900248
trx_state: ROLLING BACK
trx_started: 2021-10-16 01:30:15
trx_requested_lock_id: NULL
trx_wait_started: NULL
trx_weight: 28257129
trx_mysql_thread_id: 179422242
trx_query: update xxxx
trx_operation_state: rollback
trx_tables_in_use: 1
trx_tables_locked: 1
trx_lock_structs: 7764183
trx_lock_memory_bytes: 999306792
trx_rows_locked: 117272180 # 此事务锁定的大致数量或行数。该值可能包括物理上存在但对事务不可见的删除标记行。
trx_rows_modified: 20492946 # 此事务中修改和插入的行数,为0时,锁将会释放
trx_concurrency_tickets: 0
trx_isolation_level: REPEATABLE READ
trx_unique_checks: 1
trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
trx_adaptive_hash_latched: 0
trx_adaptive_hash_timeout: 10000
trx_is_read_only: 0
trx_autocommit_non_locking: 0
总结:问题既然已经排查出来,就等着数据回滚释放表了。
借鉴文章:https://www.dianjilingqu.com/657011.html
MySQL 使用Navicat delete/insert into/update 大量数据表锁死,kill的线程后线程处于killed状态问题解决的更多相关文章
- mysql 基本语法学习1(数据库、数据表、数据列的操作)
今天学习了一下mysql语法,并记录下来 1.mysql的数据库操作 /***1.操作数据库的语法 ***/ -- 1)显示所有数据库 -- show databases; -- 2)创建数据库 -- ...
- MySQL学习之路2-数据库and数据表的基本操作
数据库基本操作 查看.选择数据库: show databases; use <databasename>; 创建数据库:create database <dbname> cha ...
- mysql导入导出sql文件(包括数据库和数据表的操作)
废话不多说直接开始. 在windows命令行下登录mysql,创建一个test_01数据库,创建一个user表,并插入一条数据,如下 一.导出数据库test_01 1.退出数据库,在命令行中输入 my ...
- MySQL中select、insert、update批量操作语句
项目中经常的需要使用批量操作语句对数据进行操作,使用批量语句的时候需要注意MySQL数据库的条件限制,这里主要是数据的大小限制,这里对批量插入.批量查找及批量更新的基础操作进行下简单的汇总. 1.批量 ...
- MySQL中的触发器insert、update
以下为MySQL 触发器insert 的3个示例演示(update类似) delimiter // create trigger InsertUser before insert on user fo ...
- postgresql 数据库 INSERT 或 UPDATE 大量数据时速度慢的原因分析
前言 最近这段时间一直使用pg 数据库插入更新大量的数据,发现pg数据库有时候插入数据非常慢,这里我对此问题作出分析,找到一部分原因,和解决办法. 一 死元祖过多 提起pg数据库,由于他的构造,就不得 ...
- MySQL 创建、删除、显示数据库、数据表
1 创建.删除.显示数据库 -- 创建数据库 create database student_db character set utf8 collate utf8_general_ci; -- 删除数 ...
- php +mysql 添加 删除 修改 insert into delete update
INSERT INTO 插入数据库 $sql = "INSERT INTO subject (uid,fun,title) VALUES (3,88,'语文')"; $query ...
- MySql事务select for update及数据的一致性处理讲解
MySQL中的事务,默认是自动提交的,即autocommit = 1: 但是这样的话,在某些情形中就会出现问题:比如: 如果你想一次性插入了1000条数据,mysql会commit1000次的, 如果 ...
- 高并发解决方案之 mysql悲观锁:select ... for update
select ... for update 场景:多个进程都先读后写咋办,需要的是让他们串行执行. 比如库存的减少.一般这些操作都是很长一串并且是开启事务的.如果库存刚开始读的时候是1,而立马另一个进 ...
随机推荐
- 用好kafka,你不得不知的那些工具
前言 工欲善其事,必先利其器.本文主要分享一下消息中间件kafka安装部署的过程,以及我平时在工作中针对kafka用的一些客户端工具和监控工具. kafka部署架构 一个kafka集群由多个kafka ...
- Qt+QtWebApp开发笔记(四):http服务器使用Session和Cookie实现用户密码登录和注销功能
前言 前面实现了基础的跳转,那么动态交互中登录是常用功能. 本篇实现一个动态交互的简单登录和注销功能,在Qt中使用Session和Cookie技术. Demo 下载地址 链接:ht ...
- 6.4. HttpClient
1. 什么是HttpClient? HttpClient是Java 11中引入的一个新特性,用于支持同步和异步发送HTTP请求以及处理HTTP响应.它提供了简单易用的API,使得发送HTTP请求变得非 ...
- 基于 gulp 的 fancybox 源码压缩
前不久,处理生信分析的网页版自动化报告时候就使用过 fancybox,今天在优化个人博客,为博文增加图片缩放效果,解决一些滚动条问题时,才从 fancybox 的 Github 源码中接触到 gulp ...
- vulnhub_jangow
来源 vulnhub:https://www.vulnhub.com/entry/jangow-101,754/ 描述 难度:简单 这在 VirtualBox 而不是 VMware 上效果更好 我这里 ...
- 如何在.net6webapi中实现自动依赖注入
IOC/DI IOC(Inversion of Control)控制反转:控制反正是一种设计思想,旨在将程序中的控制权从程序员转移到了容器中.容器负责管理对象之间的依赖关系,使得对象不再直接依赖于其他 ...
- MQ系列13:消息大量堆积如何为解决
MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 MQ系列5:RocketMQ消息的发送模式 MQ系 ...
- substrate 编译出错unresolved import `sp_runtime::testing` failed to resolve: could not find `GenesisConfig` in `system`
error[E0432]: unresolved import `sp_runtime::testing` --> /Users/suyinrong/bitcoin-proj/substrate ...
- 智能合约HardHat框架环境的搭建
1.首先创建一个npm项目 PS C:\Users\lcds\blockchainprojects> mkdir hardhatcontract PS C:\Users\lcds\blockch ...
- 【TVM模型编译】1. onnx2relay.md
上一篇介绍了onnx模型在tvm中优化的总体流程. 在这一篇中,介绍onnx模型到relay模型的转换流程,主要涉及了以下几个方面: onnx算子到relay算子转换 relay算子实现 这一篇介绍o ...