点击上方蓝字关注我们

点击上方蓝字关注我们



手动增加表锁:lock table 表名1 read(write),表名2 read(write),其他; 查看哪些表加锁:show open tables; 释放表:unlock tables,也可以在客户端断开的时候自动释放;
show status like 'table%';
复制

table_locks_immediate:产生表级锁定的次数,表示可以立即获取锁的查询次数,每获取锁一次值加1; table_locks_waited:出现表级锁定争用而发生等待的次数(不能立即获取锁)。

共享锁(Shared Locks):简称S锁。在事务要读取一条记录时,需要先获取该记录的S锁; 独占锁(Exclusive Locks):简称X锁。在事务要改动一条记录时,需要先获取该记录的X锁;
对读取的记录加S锁:
SELECT ... LOCK IN SHARE MODE;
复制
对读取的记录加X锁:
SELECT ... FOR UPDATE;
复制
DELETE:对一条记录做 DELETE操作的过程其实是先在 B+树中定位到这条记录的位置,然后获取这条记录的X锁,然后再执行 delete mark操作。 UPDATE:① 如果未修改该记录的键值并且被更新的列占用的存储空间在修改前后未发生变化,则先在 B+树中定位到这条记录的位置,然后再获取记录的 X锁;② 如果未修改该记录的键值并且至少有一个被更新的列占用的存储空间在修改前后发生变化,则先在 B+树中定位到这条记录的位置,然后获取记录的 X锁,将该记录彻底删除掉(就是把记录彻底移入垃圾链表),最后再插入一条新记录。也就是会获取 X锁和隐式锁。③ 如果修改了该记录的键值,则相当于在原记录上做 DELETE操作之后再来一次 INSERT操作,加锁操作就需要按照 DELETE和 INSERT的规则进行了。 INSERT:通过一种称之为隐式锁来保护这条新插入的记录在本事务提交前不被别的事务访问。

show status like 'innodb_row_lock%';
复制

Innodb_row_lock_current_waits:当前正在等待锁定的数量。 Innodb_row_lock_time:从系统启动到现在锁定总时间长度。 Innodb_row_lock_time_avg:每次等待所花的平均时间。 Innodb_row_lock_time_max:从系统启动到现在等待最长的一次时间。 Innodb_row_lock_waits:系统启动后到现在总共等待的次数。

CREATE TABLE `t` (
`id` int(11) NOT NULL,
`c` int(11) DEFAULT NULL,
`d` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `c` (`c`)
) ENGINE=InnoDB;
insert into t values(0,0,0),(5,5,5),
(10,10,10),(15,15,15),(20,20,20),(25,25,25);
复制


session A 执行select … for update语句,由于id=9这一行并不存在,因此会加上间隙锁(5,10); session B 执行select … for update语句,同样会加上间隙锁(5,10),间隙锁之间不会冲突,因此这个语句可以执行成功; session B 试图插入一行(9,9,9),被session A的间隙锁挡住了,只好进入等待; session A试图插入一行(9,9,9),被session B的间隙锁挡住了。

SELECT * FROM hero WHERE country = '魏' LOCK IN SHARE MODE;
复制

如果该聚簇索引记录不满足条件,直接把该记录上的锁释放掉; 如果该聚簇索引记录满足条件,则会对相应的二级索引记录加上 X型行锁。

文章转载自KunlunBase 昆仑数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1324次阅读
2025-03-13 11:40:53
MySQL8.0统计信息总结
闫建(Rock Yan)
495次阅读
2025-03-17 16:04:03
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
466次阅读
2025-03-13 14:38:19
SQL优化 - explain查看SQL执行计划(一)
金同学
394次阅读
2025-03-13 16:04:22
MySQL突然崩溃?教你用gdb解剖core文件,快速锁定“元凶”!
szrsu
372次阅读
2025-03-13 00:29:43
MySQL生产实战优化(利用Index skip scan优化性能提升257倍)
chengang
330次阅读
2025-03-17 10:36:40
MySQL数据库当前和历史事务分析
听见风的声音
296次阅读
2025-04-01 08:47:17
MySQL 生产实践-Update 二级索引导致的性能问题排查
chengang
242次阅读
2025-03-28 16:28:31
一键装库脚本3分钟极速部署,传统耗时砍掉95%!
IT邦德
239次阅读
2025-03-10 07:58:44
MySQL8.0直方图功能简介
Rock Yan
233次阅读
2025-03-21 15:30:53