查看锁表情况

mysql> show status like ‘Table%’;
+—————————-+——–+
| Variable_name | Value |
+—————————-+——–+
| Table_locks_immediate | 795505 |
| Table_locks_waited | 0 |
| Table_open_cache_hits | 0 |
| Table_open_cache_misses | 0 |
| Table_open_cache_overflows | 0 |
+—————————-+——–+
5 rows in set (0.00 sec)

Table_locks_immediate 指的是能够立即获得表级锁的次数
Table_locks_waited 指的是不能立即获取表级锁而需要等待的次数,如果数量大,说明锁等待多,有锁争用情况

查看正在被锁定的的表
show OPEN TABLES where In_use > 0;

mysql> show OPEN TABLES where In_use > 0;
+————–+—————+——–+————-+
| Database | Table | In_use | Name_locked |
+————–+—————+——–+————-+
| music | class_record | 1 | 0 |
| vipswoole | chat_message | 3 | 0 |
| music | user_account | 1 | 0 |
| music | sales_channel | 1 | 0 |
| music | class_room | 5 | 0 |
| music | user | 1 | 0 |
| music_school | user | 1 | 0 |
+————–+—————+——–+————-+
7 rows in set (0.00 sec)

mysql>

如果查看到锁争用情况严重,可以再查看当前执行的SQL :
mysql>show processlist

(mysqladmin -uroot -p -P 3306 processlist)

mysqladmin命令有一个debug参数,可以分析当前MySQL服务的状态信息,同时也可以用来帮助我们定位当前锁的详细情况,这里我们通过该命令分析一下当前MySQL服务的详细状态,执行mysqladmin命令如下:

[root@phpmysql02 data]# mysqladmin -ujss -p -S /data/3306/mysql.sock debug

Enter password:
debug会将状态信息生成到mysql的错误文件,一般锁的信息都会保存在最后几行,这里我们在操作系统层error log最后几行:

[root@phpmysql02 data]# tail -10 phpmysql02.err

Thread database.table_name Locked/Waiting Lock_type
2 hdpic.t_wiki_zutu Waiting - write Highest priority write lock
123890 hdpic.t_wiki_zutu_category Locked - read Low priority read lock
123890 hdpic.t_wiki_zutu_photo Locked - read Low priority read lock
123890 hdpic.t_wiki_zutu Locked - read Low priority read lock
124906 hdpic.t_wiki_zutu Waiting - read Low priority read lock
从上述信息可以看出,123890持有的读锁阻塞了2的写入和124906的读操作,这个状态符合我们的推论,接下来处理就比较单纯了,如果现状不可接受,不能继续等待,将123890杀掉,释放资源即可:

mysql> kill 123890;

Query OK, 0 rows affected (0.00 sec)
再次执行show processlist查看:

使用系统表进行锁查询:

select r.trx_isolation_level, r.trx_id waiting_trx_id,r.trx_mysql_thread_id waiting_trx_thread,
r.trx_state waiting_trx_state,lr.lock_mode waiting_trx_lock_mode,lr.lock_type waiting_trx_lock_type,
lr.lock_table waiting_trx_lock_table,lr.lock_index waiting_trx_lock_index,r.trx_query waiting_trx_query,
b.trx_id blocking_trx_id,b.trx_mysql_thread_id blocking_trx_thread,b.trx_state blocking_trx_state,
lb.lock_mode blocking_trx_lock_mode,lb.lock_type blocking_trx_lock_type,lb.lock_table blocking_trx_lock_table,
lb.lock_index blocking_trx_lock_index,b.trx_query blocking_query
from information_schema.innodb_lock_waits w inner join information_schema.innodb_trx b on b.trx_id=w.blocking_trx_id
inner join information_schema.innodb_trx r on r.trx_id=w.requesting_trx_id
inner join information_schema.innodb_locks lb on lb.lock_trx_id=w.blocking_trx_id
inner join information_schema.innodb_locks lr on lr.lock_trx_id=w.requesting_trx_id \G


涉及的3张表说明:

  1. information_shcema下的三张表(通过这三张表可以更新监控当前事物并且分析存在的锁问题)
    —— innodb_trx ( 打印innodb内核中的当前活跃(ACTIVE)事务)
    —— innodb_locks ( 打印当前状态产生的innodb锁 仅在有锁等待时打印)
    —— innodb_lock_waits (打印当前状态产生的innodb锁等待 仅在有锁等待时打印)

    1) innodb_trx表结构说明 (摘取最能说明问题的8个字段)
    字段名 说明
    trx_id innodb存储引擎内部唯一的事物ID
    trx_state
    当前事物状态(running和lock wait两种状态)
    trx_started
    事物的开始时间
    trx_requested_lock_id 等待事物的锁ID,如trx_state的状态为Lock wait,那么该值带表当前事物等待之前事物占用资源的ID,若trx_state不是Lock wait 则该值为NULL
    trx_wait_started 事物等待的开始时间
    trx_weight 事物的权重,在innodb存储引擎中,当发生死锁需要回滚的时,innodb存储引擎会选择该值最小的进行回滚
    trx_mysql_thread_id mysql中的线程id, 即show processlist显示的结果
    trx_query 事物运行的SQL语句
    2)innodb_locks表结构说明

字段名 说明
lock_id 锁的ID
lock_trx_id 事物的ID
lock_mode 锁的模式(S锁与X锁两种模式)
lock_type 锁的类型 表锁还是行锁(RECORD)
lock_table 要加锁的表
lock_index 锁住的索引
lock_space 锁住对象的space id
lock_page 事物锁定页的数量,若是表锁则该值为NULL
lock_rec 事物锁定行的数量,若是表锁则该值为NULL
lock_data 事物锁定记录主键值,若是表锁则该值为NULL(此选项不可信)
3)innodb_lock_waits表结构说明
字段名 说明
requesting_trx_id申请锁资源的事物ID
requested_lock_id申请的锁的ID
blocking_trx_id阻塞其他事物的事物ID
blocking_lock_id阻塞其他锁的锁ID

可以根据这三张表进行联合查询,得到更直观更清晰的结果,可以参考如下SQL(可根据自己的分析习惯适进行调整)

MYSQL 表锁情况查看相关推荐

  1. mysql 查看锁表日志_MYSQL 表锁情况查看

    查看锁表情况 mysql> show status like 'Table%'; +----------+--–+ | Variable_name | Value | +----------+- ...

  2. 由Table_locks_waited想到的mysql 表锁问题

    由Table_locks_waited想到的mysql 表锁问题2010-05-13 13:15MyISAM表锁 一般情况下,MYSQL在更新操作会自动加表锁.不需要显式加锁.除非是数据要求严格的逻辑 ...

  3. MySQL表锁了如何解锁

    MySQL表锁了如何解锁 SHOW PROCESSLIST;  -- 运行这个条命令,会出现下面截图所示内容,找到 字段 state  值中有waiting的记录,看看是不是自己需要解锁的表 字段 i ...

  4. MySQL表锁、行锁、排它锁和共享锁

    文章目录 一.事务隔离机制的选择 二.表级锁&行级锁 三.排它锁(Exclusive)和共享锁(Shared) 1. 测试不同事务之间排它锁和共享锁的兼容性 2. 测试行锁加在索引项上 四.串 ...

  5. 彻底搞懂MySQL表锁、行锁和叶锁

    按照锁的粒度划分:行锁.表锁.页锁 行锁 行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁.可能会出现死锁的情况 共享锁用法(Shared Locks 简称S锁 读锁): 若事 ...

  6. mysql 表锁和行锁

    一.表锁 表读锁 lock table read; 一个session设置读锁,当前session更新和插入都会报错,另一个session只能读,写会阻塞. 表写锁 lock table write; ...

  7. mysql表分区、查看分区

    原文地址:http://blog.csdn.net/feihong247/article/details/7885199 一.       mysql分区简介 数据库分区 数据库分区是一种物理数据库设 ...

  8. mysql表锁机制详解

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

  9. mysql 表锁-解锁

    遇到问题"" 用工具navicat打开一张表的时候,有的时候会发现这张表怎么打不开,关了navicat工具,再打开,也是同样的状态. 查看表锁: show OPEN TABLES ...

最新文章

  1. 使用条件卷积进行实例和全景分割
  2. 一篇综述带你全面了解迁移学习的领域泛化(Domain Generalization)
  3. 用指针式万用表欧姆档检测发光二极管
  4. 分屏显示_王者做图显示器,戴尔(DELL)U2417全面介绍
  5. Android系统进程Zygote启动过程的源代码分析
  6. 【OS学习笔记】六 实模式:编写主引导扇区代码
  7. 如何高效率学Web前端 怎么规划前端学习路线
  8. c# contains方法_HTML5系列之新的API(新操作方法、文件获取、地理定位、音视频、摄像头等)
  9. PHP数据layui表格,基于layui和thinkphp数据表格的数据接口,layui表格局部刷新
  10. 利用WebBrowser获得页面部分数据
  11. 2018-2019-2 20175228实验二《面向对象程序设计》实验报告
  12. SYS/BIOS与SRIO应用实例
  13. zblog php 模板修改,ZBlog博客程序zblogPHP主题模板定制仿制修改
  14. 周公恐惧流言日,王莽谦恭未篡时
  15. 计算机系统老更新,win10电脑老是重启更新怎么办_完美解决win10电脑老是重启更新的方法...
  16. 面试官:我们来聊一聊Redis吧,你了解多少就答多少
  17. 在Fcitx5中使用自定义双拼方案
  18. MYSQL排序加分页报错Out of sort memory, consider increasing server sort buffer size
  19. duplicate designator is not allowedC/C++(2906)
  20. 中国电信9月在京推5G新号段,资费199元至599元?

热门文章

  1. python-语言播报
  2. MyBatis 问题(持续更新)
  3. 栈和队列----用栈求解汉诺塔问题
  4. js 从一个函数中传递值到另一个函数
  5. nodejs+grunt配置记
  6. JAVA中深拷贝与浅拷贝(在网上找到的) 希望对于理解深拷贝与浅拷贝有帮助...
  7. [Oracle11g] 通过伪列查询
  8. JDBC(11)—数据库连接池
  9. 如何做个好员工(转载)
  10. 机器学习 —— 概率图模型(学习:贝叶斯估计)