首页 > 数据库 >MySQL 使用Navicat delete/insert into/update 大量数据表锁死,kill的线程后线程处于killed状态问题解决

MySQL 使用Navicat delete/insert into/update 大量数据表锁死,kill的线程后线程处于killed状态问题解决

时间:2023-08-30 17:55:24浏览次数:33  
标签:语句 insert 事务 trx 数据表 线程 MySQL

    MySQL 使用delete/insert into/update 大量数据表锁死,kill的线程后线程处于killed状态问题解决

  1. 实际生产环境问题描述:
  • 使用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官网推荐: https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_process

 

标签:语句,insert,事务,trx,数据表,线程,MySQL
From: https://www.cnblogs.com/zhuzhu-you/p/17667858.html

相关文章

  • 线程同步 读写锁
    目录读写锁特点函数初始化和析构读锁写锁解锁读写锁使用读写锁一把锁,并不是读锁和写锁称之为读写锁,因为他既可以锁定读操作,也可以锁定写操作pthread_rwlock_trwlock;锁中记录了锁的状态打开关闭锁定的操作锁读锁写哪个线程持有钥匙使用方式和互斥锁相同:找共享资......
  • 线程篇--线程的特点
    1.线程是轻量级进程(light-weightprocess),也有PCB,创建线程使⽤的底层函数和进程⼀样,都是clone;2.从内核⾥看进程和线程是⼀样的,都有各⾃不同的PCB;3.进程可以蜕变成线程;4.在linux下,线程最是⼩的执⾏单位;进程是最⼩的分配资源单位。实际上,⽆论是创建进程的fork,还是创建线......
  • 线程同步 死锁
    目录加锁后忘记解锁重复加锁,造成死锁死锁成环如何避免加锁后忘记解锁//场景1voidfunc(){for(inti=0;i<6;++i){//当前线程A加锁成功,当前循环完毕没有解锁,在下一轮循环的时候自己被阻塞了//其余的线程也被阻塞 pthread_mutex_lock(......
  • CF1839C Insert Zero and Invert Prefix 题解
    首先考虑无解的情况,很明显\(a_n\)必须为\(0\),否则没有解,因为如果最后一位为\(1\)那么必须有\(n\)这个数存在于\(b\)序列中,而这种情况时不符合题意的。然后考虑如何求解,先考虑一种比较特殊的情况,就是若干个\(1\)后面接着一个\(0\),这里假设\(1\)的数量有\(k\)个,这......
  • python多线程
    python多线程多线程threading,利用CPU和IO可以同时执行的原理多进程multiprocessing,利用多核CPU的能力,真正的并行执行任务异步IOasyncio,在单线程利用CPU和IO同时执行的原理,实现函数异步执行使用Lock对资源加锁,防止冲突访问使用Queue实现不同线程/进程之间的数据通信,实现生......
  • leetcode & c++多线程刷题日志
    1.按序打印按序打印解法互斥锁classFoo{mutexmtx1,mtx2;public:Foo(){mtx1.lock(),mtx2.lock();}voidfirst(function<void()>printFirst){printFirst();mtx1.unlock();}voidsecond(function<voi......
  • 多线程|volatile的使用
    一、内存可见性问题先来看如下代码classMyCounter{publicintflag=0;}publicclassThreadDemo22{publicstaticvoidmain(String[]args){MyCountermyCounter=newMyCounter();Threadt1=newThread(()->{while(myCounter.f......
  • 这是一个基于threading可停止线程的有限容量有限并行度的python任务管理器
    这是一个可停止线程的有限容量有限并行度的任务管理器基于:GitHub-AlitaIcon/StopableThreadJob:可停止线程任务管理器QuickStart基础调用与效果importtimeimportdatetimefromloguruimportloggerfromStopableThreadJob.job_managerimportJobManagerif__name......
  • 深入理解操作系统中进程与线程的区别及切换机制(下)
    前言上一篇文章中我们了解了进程的执行方式,包括早期单核处理器上的顺序执行以及引入多任务概念实现的伪并行。我们还探讨了进程的状态模型。进程可以处于就绪、运行、阻塞和结束等不同的状态。在本篇文章中,我将探讨研究进程的状态模型、控制结构和切换机制。希望通过这篇文章的......
  • naiveui | 数据表格超长文字省略处理
    一、设置ellipsis使用数据表格DataTable组件的省略设置ellipsis,但是如果内容过长的情况下,会溢出consttextColumns={key:'uie_content',title:'文本',ellipsis:{tooltip:true,},},二、自定义省略内容的宽度使用弹......