我是靠谱客的博主 活泼泥猴桃,最近开发中收集的这篇文章主要介绍数据库锁表如何处理:「 Lock wait timeout exceeded; try restarting transaction」数据库锁表「 Lock wait timeout exceeded; try restarting transaction 」,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 数据库锁表`「 Lock wait timeout exceeded; try restarting transaction 」`
    • 前言
    • 操作数据库的时候发现,锁表了
    • information_schema 库中有三个关于锁的表(存储引擎)

数据库锁表「 Lock wait timeout exceeded; try restarting transaction 」

前言

` 还是前段时间的那个老项目 : 客户要给服务器系统升级,当时的服务器部署手册,
以及宕机处理方案也在里面,于是客户的IT部门自己重启了相关服务后,发现操作部分功能时发现锁表了,
于是勇敢的小齐又被老板安排了
经过排查发现实际上是因为操作不规范,导致多启动了一个sleuth服务,但是这个服务,项目不需要
出现了数据库锁表,就下面这张图

后面赶紧通知对方IT部门停掉sleuth容器

下面就是处理锁表问题的步骤
`

操作数据库的时候发现,锁表了

在这里插入图片描述

information_schema 库中有三个关于锁的表(存储引擎)

innodb_trx ## 当前运行的所有事务
innodb_locks ## 当前出现的锁
innodb_lock_waits ## 锁等待的对应关系

innodb_trx

  `trx_id` varchar(18) NOT NULL DEFAULT '',  #事务ID 
  `trx_state` varchar(13) NOT NULL DEFAULT '',`#事务状态
  `trx_started` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',	#事务开始时间
  `trx_requested_lock_id` varchar(81) DEFAULT NULL,	#innodb_locks.lock_id
  `trx_wait_started` datetime DEFAULT NULL,	#事务开始等待的时间
  `trx_weight` bigint(21) unsigned NOT NULL DEFAULT '0',
  `trx_mysql_thread_id` bigint(21) unsigned NOT NULL DEFAULT '0',	#事务线程ID
  `trx_query` varchar(1024) DEFAULT NULL,	#具体SQL语句
  `trx_operation_state` varchar(64) DEFAULT NULL,	#事务当前操作状态
  `trx_tables_in_use` bigint(21) unsigned NOT NULL DEFAULT '0',#事务中有多少个表被使用
  `trx_tables_locked` bigint(21) unsigned NOT NULL DEFAULT '0',	#事务拥有多少个锁
  `trx_lock_structs` bigint(21) unsigned NOT NULL DEFAULT '0',
  `trx_lock_memory_bytes` bigint(21) unsigned NOT NULL DEFAULT '0',#事务锁住的内存大小(B)
  `trx_rows_locked` bigint(21) unsigned NOT NULL DEFAULT '0',#事务锁住的行数
  `trx_rows_modified` bigint(21) unsigned NOT NULL DEFAULT '0',#事务更改的行数
  `trx_concurrency_tickets` bigint(21) unsigned NOT NULL DEFAULT '0',#事务并发票数
  `trx_isolation_level` varchar(16) NOT NULL DEFAULT '',#事务隔离级别
  `trx_unique_checks` int(1) NOT NULL DEFAULT '0',#是否唯一性检查
  `trx_foreign_key_checks` int(1) NOT NULL DEFAULT '0',#是否外键检查
  `trx_last_foreign_key_error` varchar(256) DEFAULT NULL,#最后的外键错误
  `trx_adaptive_hash_latched` int(1) NOT NULL DEFAULT '0',
  `trx_adaptive_hash_timeout` bigint(21) unsigned NOT NULL DEFAULT '0',
  `trx_is_read_only` int(1) NOT NULL DEFAULT '0',
  `trx_autocommit_non_locking` int(1) NOT NULL DEFAULT '0'

innodb_locks

  `lock_id` varchar(81) NOT NULL DEFAULT '',#锁ID
  `lock_trx_id` varchar(18) NOT NULL DEFAULT '',#拥有锁的事务ID
  `lock_mode` varchar(32) NOT NULL DEFAULT '',#锁模式
  `lock_type` varchar(32) NOT NULL DEFAULT '',#锁类型
  `lock_table` varchar(1024) NOT NULL DEFAULT '',#被锁的表
  `lock_index` varchar(1024) DEFAULT NULL,#被锁的索引
  `lock_space` bigint(21) unsigned DEFAULT NULL,#被锁的表空间号
  `lock_page` bigint(21) unsigned DEFAULT NULL,#被锁的页号
  `lock_rec` bigint(21) unsigned DEFAULT NULL,#被锁的记录号
  `lock_data` varchar(8192) DEFAULT NULL	#被锁的数据

innodb_lock_waits

  `requesting_trx_id` varchar(18) NOT NULL DEFAULT '',#请求锁的事务ID
  `requested_lock_id` varchar(81) NOT NULL DEFAULT '',#请求锁的锁ID
  `blocking_trx_id` varchar(18) NOT NULL DEFAULT '',#当前拥有锁的事务ID
  `blocking_lock_id` varchar(81) NOT NULL DEFAULT ''#当前拥有锁的锁ID
select * from INNODB_TRX ;
select * from innodb_lock_waits ;
select * from INNODB_LOCKS ;

kill 进程号  

上面的进程号指的是:innodb_trx表的trx_mysql_thread_id字段的值

至此问题解决

分享一句我特别喜欢的话:每一天都是一个新的日子,走运当然是好的,不过我情愿做到分毫不差。这样,运气来的时候,你就有准备了。 ————海明威《老人与海》

最后

以上就是活泼泥猴桃为你收集整理的数据库锁表如何处理:「 Lock wait timeout exceeded; try restarting transaction」数据库锁表「 Lock wait timeout exceeded; try restarting transaction 」的全部内容,希望文章能够帮你解决数据库锁表如何处理:「 Lock wait timeout exceeded; try restarting transaction」数据库锁表「 Lock wait timeout exceeded; try restarting transaction 」所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部