查看锁表情况

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张表说明:

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 查看锁表日志_MYSQL 表锁情况查看相关推荐

  1. mysql锁表查询_Mysql数据库锁情况下开启备份导致数据库无法访问处理分享

    [背景简介] MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),因为其速度.可靠性和适应性而备受关注.大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择.mysql ...

  2. mysql行锁表怎么办_mysql - 表锁,行锁

    MyISAM存储引擎:开销小,加锁快,无死锁.锁定粒度大,并发度低,容易发生锁冲突.   不支持事务.            采用表锁 (操作时对操作的表上锁) 基本不用了 innoDB存储引擎:开销 ...

  3. mysql 数据库表被锁住了_mysql数据库锁的产生原因及解决办法

    数据库和操作系统一样,是一个多用户使用的共享资源.当多个用户并发地存取数据 时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性 ...

  4. mysql查看表备注_mysql表中如何查看备注

    mysql表中查看备注的方法:1.通过"information_schema.TABLES"语句查看所有表的注释:2.通过"information_schema. TAB ...

  5. mysql查看表描述_MySQL表记录操作介绍(重点介绍查询操作)

    MySQL表记录操作指的是对数据库表中数据进行CRUD增删改查操作,一下将一一给大家介绍,重点介绍查询操作. 一.插入数据(INSERT) 二.删除数据(DELETE) 三.修改数据(UPDATE) ...

  6. mysql数据锁的类型_MySQL数据库锁类型

    锁概念: 当高并发访问同一个资源时,可能会导致数据不一致,需要一种机制将用户访问数据的顺序进行规范化,以保证数据库数据的一致性.锁就是其中的一种机制. 一个栗子 :以买火车票为例,火车票可面向广大消费 ...

  7. mysql myisam表分区_MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)

    一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了1000万条,那么就可以根据入库日期将表分区,也可以根据所在地将表 ...

  8. mysql 表空间_mysql 表空间

    什么是表空间 默认情况下,InnoDB只包含一个称为系统表空间的表空间,其标识符为0.可以使用innodb_file_per_table配置参数间接创建更多表空间.表空间由一系列文件组成.文件的大小不 ...

  9. mysql表操作_MySQL表操作语句用法百科

    本文采用MySQL5.7.26版本 1 建表语句 建表语句create语法如下: 1.1 设置unsigned unsigned设置数值类型是否为无符号数,可以为空,如下举例: 1.2 设置默认值 d ...

最新文章

  1. springboot整合Quartz实现动态配置定时任务
  2. AD 域服务简介(二)- Java 获取 AD 域用户
  3. redis 命令行 操作
  4. 使用方法_山西硅肥使用方法
  5. acfun html5 转换,AcFun剧场模式插件
  6. acm java题_【转】ACM中java的使用
  7. 发现一个记录笔记的方法(康奈尔笔记即5R笔记)
  8. pyhanlp机构名识别时动态添加自定义词表(CustomDictionary)
  9. 小型团队项目管理_寻找小型工程团队的项目管理平衡
  10. 京东“竖亥小车”秒测商品尺寸重量
  11. c++编程题 袋鼠过河
  12. 小程序使用vant中的步骤条 vant-steps
  13. 逆向教程2 某信营业厅
  14. R语言环境下Bioconductor安装2020-10-31
  15. 京东商品主图定时替换,90%卖家这样做
  16. 【数学笔记】信息论基础
  17. 数控开料机,板式家具开料机
  18. 【第106期】10本硬核技术书,带你读懂物联网,玩转元宇宙
  19. MRT(MODIS Reprojection Tool) 下载及安装教程
  20. python簇状柱形图_Python:matplotlib 和 Seaborn 之簇状柱形图、分面 (三十五)

热门文章

  1. mysql semi-synchronous_MySQL Semisynchronous Replication介绍
  2. c标签foreach遍历list_遍历 Dictionary,你会几种方式?
  3. date javascript 时区_第23节 Datejs 日期库-Web前端开发之Javascript-零点程序员-王唯
  4. python字典和集合双向索引_Python字典和集合
  5. mysql 打包 脚本_windows下mysql自动备份压缩打包时间命名批处理脚本
  6. jracdrive变频器说明书580_jracdrive变频器err02
  7. JAVA错误:无法从静态上下文中引用非静态变量 this
  8. 浅析MATLAB中的内联函数、匿名函数和函数函数
  9. C#程序将DLL包进EXE方法
  10. SVG格式的Icon,用了你就知道有多香