文档章节

Mysql被锁查询

hebad
 hebad
发布于 2017/08/29 11:37
字数 782
阅读 16
收藏 0

原文:http://imysql.com/2015/03/25/mysql-faq-how-to-fetch-latest-trxid.shtml

 

  1. 执行 SHOW ENGINE INNODB STATUS ,查看事务相关信息
    =====================================
    150303 17:16:11 INNODB MONITOR OUTPUT
    =====================================
    Per second averages calculated from the last 15 seconds
    ...
    ------------
    TRANSACTIONS
    Trx id counter 3359877657 -- 当前最大事务ID
    Purge done for trx's n:o < 3359877468 undo n:o < 0 state: running
    History list length 324
    LIST OF TRANSACTIONS FOR EACH SESSION:
    ---TRANSACTION 0, not started -- 该会话中执行SHOW ENGINE INNODB STATUS,不会产生事务,所以事务ID为0
    MySQL thread id 4692367, OS thread handle 0x51103940, query id 677284426 xx.173ops.com 10.x.x.x yejr init
    SHOW /*!50000 ENGINE*/ INNODB STATUS
    ---TRANSACTION 3359877640, not started --非活跃事务,还未开始
    mysql tables in use 1, locked 0
    MySQL thread id 4678384, OS thread handle 0x41a57940, query id 677284427 xx.173ops.com 10.x.x.x yejr System lock
    select polinfo0_.Fid as Fid39_0_, ...
    
    ---TRANSACTION 3359877652, not started
    MySQL thread id 4678383, OS thread handle 0x50866940, query id 677284420 xx.173ops.com 10.x.x.x yejr cleaning up
    
    ---TRANSACTION 3359877635, ACTIVE 1358 sec, thread declared inside InnoDB 5000 --活跃长事务,运行了1358秒还未结束,要引起注意,可能会导致大量锁等待发生
    mysql tables in use 1, locked 1
    1 lock struct(s), heap size 376, 0 row lock(s), undo log entries 1
    MySQL thread id 3120717, OS thread handle 0x529b4940, query id 677284351 xx.173ops.com 10.x.x.x yejr query end
    insert into t_live_room ...

     

  2. 查看INFORMATION_SCHEMA.INNODB_TRX、INNODB_LOCKS、INNODB_LOCK_WAITS 三个表,通过这些信息能快速发现哪些事务在阻塞其他事务
    1. 先查询 INNODB_TRX 表,看看都有哪些事务
      mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX\G
      *************************** 1. row ***************************
       trx_id: 17778 -- 当前事务ID
       trx_state: LOCK WAIT -- 处于锁等待状态,也就是等待其他会话释放锁资源
       trx_started: 2015-03-04 10:40:26
       trx_requested_lock_id: 17778:82:3:6 -- 欲请求的锁
       trx_wait_started: 2015-03-04 10:40:26
       trx_weight: 2 -- 大意是该锁影响了2行记录
       trx_mysql_thread_id: 657 -- processlist中的线程ID
       trx_query: update trx_fee set fee=rand()*1000 where id= 4
       trx_operation_state: starting index read
       trx_tables_in_use: 1
       trx_tables_locked: 1
       trx_lock_structs: 2
       trx_lock_memory_bytes: 360
       trx_rows_locked: 1
       trx_rows_modified: 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
       *************************** 2. row ***************************
       trx_id: 17773
        trx_state: RUNNING
       trx_started: 2015-03-04 10:40:23
       trx_requested_lock_id: NULL
       trx_wait_started: NULL
       trx_weight: 10
       trx_mysql_thread_id: 656
       trx_query: NULL
       trx_operation_state: NULL
       trx_tables_in_use: 0
       trx_tables_locked: 0
       trx_lock_structs: 2
       trx_lock_memory_bytes: 360
       trx_rows_locked: 9
       trx_rows_modified: 8
       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

      1): kill trx_mysql_thread_id;  2):  use information_schema;  select * from processlist where id in ( trx_mysql_thread_id );  3):  show engine innodb status\G

    2. 再看 INNODB_LOCKS 表,看看都有什么锁
      mysql> select * from information_schema.INNODB_LOCKS\G
      *************************** 1. row ***************************
      lock_id: 17778:82:3:6 --当前锁ID
      lock_trx_id: 17778 --该锁对应的事务ID
      lock_mode: X -- 锁类型,排它锁X
      lock_type: RECORD --锁范围,记录锁:record lock,其他锁范围:间隙锁:gap lock,或者next-key lock(记录锁+间隙锁)
      lock_table: `test`.`trx_fee`
      lock_index: PRIMARY --加载在哪个索引上的锁
      lock_space: 82
      lock_page: 3
      lock_rec: 6
      lock_data: 4
      *************************** 2. row ***************************
      lock_id: 17773:82:3:6
      lock_trx_id: 17773
      lock_mode: X
      lock_type: RECORD
      lock_table: `test`.`trx_fee`
      lock_index: PRIMARY
      lock_space: 82
      lock_page: 3
      lock_rec: 6
      lock_data: 4

       

    3. 最后看 INNODB_LOCK_WAITS 表,看看当前都有哪些锁等待
      mysql> select * from information_schema.INNODB_LOCK_WAITS\G
      *************************** 1. row ***************************
      requesting_trx_id: 17778 --请求锁的事务ID(等待方)
      requested_lock_id: 17778:82:3:6 -- 请求锁ID
      blocking_trx_id: 17773 -- 阻塞该锁的事务ID(当前持有方,待释放)
      blocking_lock_id: 17773:82:3:6 -- 持有的锁ID

       

© 著作权归作者所有

共有 人打赏支持
hebad
粉丝 16
博文 100
码字总数 11190
作品 0
杭州
技术主管
私信 提问
MySQL中的共享锁与排他锁

在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突。行级锁分为共享锁和排他锁两种,本文将详细介绍共享锁及排他锁的概念、...

steven
2016/09/23
32
0
MySQL DBA入门到高级笔记:MySQL架构

http://www.wyzc.com/forum/60180.html?tg=3006123630 MySQL逻辑架构 连接管理与安全性: 1、MySQL会为每一个客户端连接分配一个线程,这个连接的查询只会在这个单独的线程执行。服务器会负责...

大王叫我来巡山Zd
2016/03/31
183
0
悲观锁总结和实践

最近学习了一下数据库的悲观锁和乐观锁,根据自己的理解和网上参考资料总结如下: 悲观锁介绍(百科): 悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系...

真爱2015
2016/01/07
42
0
使用mysql中的锁解决高并发问题

为什么要加锁 多核计算机的出现,计算机实现真正并行计算,可以在同一时刻,执行多个任务。在多线程编程中,因为线程执行顺序不可控导致的数据错误。比如,多线程的理想状态是这样的 但是实际情...

紫葡萄0
11/23
0
0
mysql查询更新时的锁表机制分析

为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制。 一、概述 MySQL有三种锁的级别:页级、表级、行级。 MyISAM和MEMORY存储引擎采用的是表级锁(table-l...

桔子
2013/06/28
0
3

没有更多内容

加载失败,请刷新页面

加载更多

Centos 7 JDK、Tomcat9 安装并配置

Centos 7 JDK、Tomcat9 安装并配置 2017年04月17日 22:44:36 我是一座离岛 阅读数:5707更多 个人分类: webCentOS 版权声明:博主原创文章,转载请注明出处。 https://blog.csdn.net/ngl272...

linjin200
15分钟前
1
0
Spring boot遇到的问题

2018年12月11日 Ver:2.0.2升级到2.1.1文件上传遇到问题 The method setMaxFileSize(String) from the type MultipartConfigFactory is deprecated 是不是就不用设置了?...

夏碌冬藏
16分钟前
1
0
Spark sql操作Hive

这里说的是最简便的方法,通过Spark sql直接操作hive。前提是hive-site.xml等配置文件已经在Spark集群配置好。 val logger = LoggerFactory.getLogger(SevsSpark4.getClass) def main(args:...

守望者之父
17分钟前
1
0
炫酷粒子表白 | 听说女神都想谈恋爱了!

最近听女神说想谈恋爱了,✧(≖ ◡ ≖) 嘿嘿,一定不能放过这个机会,给她来个不一样的表白。 那么咱们就一起来把这个粒子系统玩出花来吧 演示地址: https://es2049.studio/work-show/text...

我的卡
18分钟前
2
0
Spark Streaming管理Kafka偏移量

前言 为了让Spark Streaming消费kafka的数据不丢数据,可以创建Kafka Direct DStream,由Spark Streaming自己管理offset,并不是存到zookeeper。启用Spark Streaming的 checkpoints是存储偏移...

架构师springboot
21分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部