数据库:mysql5.6 innoDB锁等待
来源:互联网 发布:直播app源码搭建 编辑:程序博客网 时间:2024/06/04 19:02
在information_schema库中新增了三个关于锁的表,分别是innodb_trx,innodb_locks和innodb_lock_waits
select * from information_schema.INNODB_TRX;
:记录当前运行的所有事务
select * from information_schema.INNODB_LOCKS;
:记录当前出现的锁
select * from information_schema.INNODB_LOCK_WAITS;
:记录锁等待的对应关系
innodb_trx表结构
trx_id:事务ID
trx_state:事务状态,有以下几种状态:running,lock wait,rolling back和committing
trx_requested_lock_id:事务当前正在等待锁的标识,可以和innodb_locks 进行join可以获得更多的信息
trx_wait_started:事务开始等待时间
trx_weight:事务的权重
trx_mysql_thread_id:事务线程Id,可以和processlist表join
trx_query:事务正在执行的sql语句
trx_operation_state:事务当前操作状态
trx_tables_in_use:当前事务执行sql中使用的表的个数
trx_tables_locked:当前执行sql的行锁数量
trx_lock_structs:事务保留的锁数量
trx_lock_memory_bytes:事务锁住的内存大小,单位为bytes
trx_lock_locked:事务锁住的记录数,包含标记为deleted,并且已经保存到磁盘但对事务不可见的行
trx_rows_modified:事务更改的行数
trx_concurrency_tickets:事务并发票数
trx_isolation_level:当前事务的隔离级别
trx_unique_checks:是否打开唯一性检查的标识
trx_foreign_key_checks:是否打开外键检查的标识
trx_last_foreign_key_error:最后一次的外键错误信息
trx_adaptive_hash_latched:自适应散列索引是否被当前事务锁住的标识。
trx_adaptive_hash_timeout:是否立刻放弃为自适应散列索引搜索 LATCH 的标识。
查看innodb_locks表结构
lock_id:锁ID
lock_trx_id:拥有锁的事务 ID。可以和 INNODB_TRX 表 JOIN 得到事务的详细信息。
lock_mode:锁的模式。如下的锁类型:行锁包括:S、X、LS、LX分别代表:共享锁、排它锁、意向共享锁、意向排它锁。表级锁包括:S_GAP、X_GAP、IS_GAP、IX_GAP和AUTO_INC,分别代表共享间隙锁、排它间隙锁、意向共享间隙锁、意向排它间隙和自动递增锁。
lock_type:锁的类型。RECORD 代表行级锁,TABLE 代表表级锁。
lock_table:被锁定的或者包含锁定记录的表的名称。
lock_index:当LOCK_TYPE=’RECORD’ 时,表示索引的名称;否则为 NULL。
lock_space:当LOCK_TYPE=’RECORD’ 时,表示锁定行的表空间 ID;否则为 NULL。
lock_page:当 LOCK_TYPE=’RECORD’ 时,表示锁定行的页号;否则为 NULL。
lock_rec:当 LOCK_TYPE=’RECORD’ 时,表示一堆页面中锁定行的数量,亦即被锁定的记录号;否则为 NULL。
lock_data:当 LOCK_TYPE=’RECORD’ 时,表示锁定行的主键;否则为NULL。
innodb_lock_waits 表结构
requesting_trx_id:请求事务的 ID。
requested_lock_id:事务所等待的锁定的 ID。可以和 INNODB_LOCKS 表 JOIN
blocking_trx_id:阻塞事务的 ID。
blocking_lock_id:某一事务的锁的 ID,该事务阻塞了另一事务的运行。可以和 INNODB_LOCKS 表 JOIN。
测试
再mysql命令行的模式下进行。
1、创建一个user表,插入数据。
2、模拟锁等待
3、执行三条查询语句,查看是否有锁现象
select * from information_schema.innodb_trx \G;
select * from information_schema.innodb_locks \G
SELECT * FROM information_schema.innodb_lock_waits \G
没有发生锁等待, innodb_locks表 和 innodb_lock_waits 表都没有数据
4、另起一个连接,执行update操作
5、再次执行查询锁的语句,发现有锁
6、解决锁等待的方法
使用show processlist;找到等待的id号,执行 kill Id 命令来解决锁等待。
或者执行rollback或者commit命令
参考地址:https://dbarobin.com/2015/01/27/innodb-lock-wait-under-mysql-5.5/
- 数据库:mysql5.6 innoDB锁等待
- mysql InnoDB锁等待
- Mysql Innodb数据库锁等待超时故障排查实践
- MySQL 5.5 InnoDB 锁等待
- MySQL5.6 InnoDB FULLTEXTIndexes研究测试
- mysql5.6-innodb引擎体系结构图
- [MySQL5.6] Innodb独立的undo tablespace
- MySQL5.6 Innodb独立的undo tablespace
- MySQL5.6 InnoDB FULLTEXT Indexes研究测试
- MySQL5.6 InnoDB中文全文索引测试
- [MySQL5.6] Innodb独立的undo tablespace
- Mysql5.5数据库的MyISAM和InnoDB引擎配置优化
- MySQL5数据库更改默认等待连接时间(wait_timeout)
- centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复
- MySQL5.6 数据库安装
- mysql InnoDB锁等待的查看及分析
- mysql InnoDB锁等待的查看及分析
- MySQL5.6Innodb表的特性和极限
- js中apply()和call()的区别和用法
- vue-cli的webpack模板项目配置文件简析
- C 数据结构 笔记(二) —— 链表
- Qt之静态链接库的创建并使用
- 打开Mac OSX原生的读写NTFS功能
- 数据库:mysql5.6 innoDB锁等待
- 递归算法1
- C 数据结构 笔记(三) —— 栈
- 仿今日头条——配置+动画3秒跳
- vue切换路由后页面显示顶端
- 增删改查表格最全面的
- 怎么样在foxmail上加载gmail邮箱(2017最新方法)?
- LR的变量选择问题
- URAL