文档章节

Mysql被锁查询

hebad
 hebad
发布于 2017/08/29 11:37
字数 782
阅读 12
收藏 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 DBA入门到高级笔记:MySQL架构

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

大王叫我来巡山Zd
2016/03/31
183
0
MySQL中的共享锁与排他锁

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

steven
2016/09/23
32
0
悲观锁总结和实践

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

真爱2015
2016/01/07
42
0
mysql查询更新时的锁表机制分析

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

桔子
2013/06/28
0
3
mysql的锁机制

锁概述 mysql锁机制的特点: 不同存储引擎支持不同的锁机制。 MyISAM和MEMORY存储引擎支持表级锁; BDB存储引擎采用页面锁; InnoDB存储引擎支持行级锁。 表级锁: 开销小,加锁快,不会出现...

暮回_梓
2017/09/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

php 使用redis锁限制并发访问类

1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功。 例如换领优惠券,如果用户同一时间并发提交换领...

豆花饭烧土豆
18分钟前
0
0
Linux环境搭建 | 手把手教你配置Linux虚拟机

在上一节 「手把你教你安装Linux虚拟机」 里,我们已经安装好了Linux虚拟机,在这一节里,我们将配置安装好的Linux虚拟机,使其达到可以开发的程度。 Ubuntu刚安装完毕之后,还无法进行开发,...

良许Linux
20分钟前
0
0
Nginix开启SSL支持HTTPS访问(自签名方法)

Nginix开启SSL支持HTTPS访问(自签名方法) 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器...

openthings
36分钟前
0
0
(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0
jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部