数据库锁表是由哪些具体机制或操作引起的?
- 内容介绍
- 文章标签
- 相关推荐
一、使用者痛点:为何锁表让你抓狂?
和运维常会遭遇以下困境:
- 查询卡死普通 SELECT 突然变得异常缓慢,甚至超时。
- 业务中断关键业务因等待锁释放而被迫挂起。说起来,
- 程序性能急剧下降CPU 与 I/O 利用率飙升。整体吞吐量大幅降低,
- 死锁频发多个事务互相等待。导致数据库自动回滚,日志频繁出现 “死锁检测” 信息。
二、数据库锁表的基本概念
数据库锁表是 DBMS 为保证数据一致性和完整性而对表或更细粒度对象施加的一种访问控制机制。它通过阻止冲突的并发操作,实现事务的原子性和隔离性。
1. 锁的层级
- 行级锁只锁定受影响的行,适合高并发读写。按理说,
- 页级锁以数据页为单位加锁。介于行级与表级之间,
- 表级锁一次性把整张表全部上锁,是最粗粒度的控制方式。
三、常见的锁类型及其工作原理
1. 共享锁
允许多个事务同时读取同一行/页/表,但禁止任何写入操作。共享锁之间不会相互阻塞,只要没有排他锁持有者即可。
2. 排他锁
一次只能有一个事务持有,用于修改数据。按理说,持有排他锁时其他事务既不能读取也不能写入。
3. 悲观锁
在读取阶段即加上共享或排他锁,直至事务结束才释放。 适用于冲突概率高的场景,
4. 乐观锁
读取时不加实际物理锁,而在更新时通过版本号或时间戳校验是否被其他事务修改。可以显著降低长事务导致的资源使用情况。
一、使用者痛点:为何锁表让你抓狂?
和运维常会遭遇以下困境:
- 查询卡死普通 SELECT 突然变得异常缓慢,甚至超时。
- 业务中断关键业务因等待锁释放而被迫挂起。说起来,
- 程序性能急剧下降CPU 与 I/O 利用率飙升。整体吞吐量大幅降低,
- 死锁频发多个事务互相等待。导致数据库自动回滚,日志频繁出现 “死锁检测” 信息。
二、数据库锁表的基本概念
数据库锁表是 DBMS 为保证数据一致性和完整性而对表或更细粒度对象施加的一种访问控制机制。它通过阻止冲突的并发操作,实现事务的原子性和隔离性。
1. 锁的层级
- 行级锁只锁定受影响的行,适合高并发读写。按理说,
- 页级锁以数据页为单位加锁。介于行级与表级之间,
- 表级锁一次性把整张表全部上锁,是最粗粒度的控制方式。
三、常见的锁类型及其工作原理
1. 共享锁
允许多个事务同时读取同一行/页/表,但禁止任何写入操作。共享锁之间不会相互阻塞,只要没有排他锁持有者即可。
2. 排他锁
一次只能有一个事务持有,用于修改数据。按理说,持有排他锁时其他事务既不能读取也不能写入。
3. 悲观锁
在读取阶段即加上共享或排他锁,直至事务结束才释放。 适用于冲突概率高的场景,
4. 乐观锁
读取时不加实际物理锁,而在更新时通过版本号或时间戳校验是否被其他事务修改。可以显著降低长事务导致的资源使用情况。

