关于mysql Gaplock以及监控锁的相关示例
来源:互联网 发布:玄幻小说 知乎 编辑:程序博客网 时间:2024/05/13 16:27
innodb引擎中,mysql中的行级别的锁大致有三种,recordlock、Gap、Next-KeyLocks。recordlock就是锁住某一行记录;而Gap会锁住某一段范围中的记录;Next-KeyLocks则是前两者加起来的效果。
下面列举了一个示例:
创建一张表,User_Info,表示用户信息,其中建了user_num唯一索引,初始有1000w数据。
先执行session1
session1:
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> select count(1) from User_Info where user_num<'u1119yux' lock in share mode;
+----------+
session2:
mysql> set autocommit=0;
insert into User_Info values (100000000,'u10000','ddddd','dddd','name','realname','1392888888',11,'dd','dd',1,1,'2012-10-10');
此时session2的insert 语句没有响应,直至超时
关于锁的查看,可以通过以下几种方式,
1、show engine innodb status
2、show processlist
3、查看INFORMATION_SCHEMA.innodb_trx、innodb_locks、innodb_lock_waits
mysql> show engine innodb status\G
可以看到,trx B5F5001等待X record locks,但是谁持有了这个锁还无法看出
------------
TRANSACTIONS
------------
Trx id counter B5F5002
Purge done for trx's n:o < B5F4EEF undo n:o < 0
History list length 685
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0, not started
MySQL thread id 3, OS thread handle 0x7f566c797700, query id 30 localhost root
show engine innodb status
---TRANSACTION B5F4EE7, ACTIVE 25 sec inserting
mysql tables in use 1, locked 1
LOCK WAIT 2 lock struct(s), heap size 376, 1 row lock(s), undo log entries 1
MySQL thread id 2, OS thread handle 0x7f566c7d8700, query id 27 localhost root update
insert into LSMP_LOTTERY_USER values (100000000,'u1019yux','ddddd','dddd','name','realname','1392888888',11,'dd','dd',1,1,'2012-10-10')
------- TRX HAS BEEN WAITING 25 SEC FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 4 page no 14 n bits 648 index `INDEX_LUSER_NUM` of table `dlsp`.`LSMP_LOTTERY_USER` trx id B5F5001 lock_mode X locks gap before rec insert intention waiting
Record lock, heap no 552 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 18; hex 7531303161716b326d69673331783374677a; asc u101aqk2mig31x3tgz;;
1: len 4; hex 8000fdf8; asc ;;
------------------
---TRANSACTION B5F4EE6, ACTIVE 55 sec
5 lock struct(s), heap size 1248, 1963 row lock(s)
MySQL thread id 1, OS thread handle 0x7f4b30560700, query id 13 localhost root
查看INFORMATION_SCHEMA获得锁的相关信息,
可以看到事务B5F4EE7等待事务B5F4EE6的S锁,
事务B5F4EE6持有行锁中的范围间隙lock
mysql> select * from INFORMATION_SCHEMA.innodb_locks\G;
*************************** 1. row ***************************
lock_id: B5F4EE7:4:14:552
lock_trx_id: B5F4EE7
lock_mode: X,GAP
lock_type: RECORD
lock_table: `dlsp`.`LSMP_LOTTERY_USER`
lock_index: `INDEX_LUSER_NUM`
lock_space: 4
lock_page: 14
lock_rec: 552
lock_data: 'u101aqk2mig31x3tgz'
*************************** 2. row ***************************
lock_id: B5F4EE6:4:14:552
lock_trx_id: B5F4EE6
lock_mode: S
lock_type: RECORD
lock_table: `dlsp`.`LSMP_LOTTERY_USER`
lock_index: `INDEX_LUSER_NUM`
lock_space: 4
lock_page: 14
lock_rec: 552
lock_data: 'u101aqk2mig31x3tgz'
2 rows in set (0.00 sec)
mysql> select * from INFORMATION_SCHEMA.innodb_lock_waits\G;
*************************** 1. row ***************************
requesting_trx_id: B5F4EE7
requested_lock_id: B5F4EE7:4:14:552
blocking_trx_id: B5F4EE6
blocking_lock_id: B5F4EE6:4:14:552
1 row in set (0.00 sec)
ERROR:
No query specified
- 关于mysql Gaplock以及监控锁的相关示例
- mysql关于锁表的监控
- 关于mysql innodb的监控
- Ajax的JSP示例以及相关知识
- mysql性能监控相关
- mysql性能监控相关
- mysql:mysql性能监控相关
- 关于mysql的监控问题(转)
- 关于监控mysql服务的脚本
- 关于mysql的相关应用
- 关于异常的处理以及相关设计
- 关于SSL以及https的相关信息
- Nano-x的相关源码以及应用示例下载.
- javascript中关于DOM的代码示例及相关笔记
- flush privileges 示例--刷新MySQL的系统权限相关表
- redis监控相关命令以及说明
- 关于Mysql里的相关大小写问题
- 关于MYSQL 表相关的操作
- myeclipse遇见的常见问题解决方案
- C/C++定义全局变量/常量几种方法的区别
- 第2部份:添加一个菜单栏和状态栏
- sublime text 2菜单栏找不到了,该怎么办
- linq gridview
- 关于mysql Gaplock以及监控锁的相关示例
- DSP Flash烧写的步骤都有哪些
- IO模式设置网络编程常见问题总结—IO模式设置,阻塞与非阻塞的比较,recv参数对性能的影响—O_NONBLOCK(open使用)、IPC_NOWAIT(msgrcv)、MSG_DONTWAIT(re
- C++虚函数表解析
- 通过压缩png图片的方式减少ipa包的尺寸
- Javascript学习
- 关于自定义任务(Tasks)的心得
- javascript深入理解js闭包
- VM9 key分享 VMware Workstation 9授权key(序列号)