并发控制的核心概念

前言

在数据库技术中,封锁 是实现并发控制的核心手段。它保证了多个事务同时进行时的数据一致性,避免了数据冲突和错误。对于初学者来说,理解封锁技术是迈向数据库高手的第一步。这篇文章将通过简洁明了的方式,帮助你轻松掌握封锁的相关知识。


什么是封锁?为什么重要?

封锁,顾名思义,就是在对数据进行操作前,先“锁定”它,确保在操作完成之前,其他事务不能对该数据进行修改。封锁的本质是对数据库资源的一种保护机制,防止多个事务同时修改数据导致的不一致。


基本封锁:排它锁与共享锁

封锁有多种类型,但是排它锁(X 锁)共享锁(S 锁) 是最基本的两种。

  • 排它锁(X 锁) :又称为写锁。当事务 T 对一个数据对象加上 X 锁后,其他事务不能对该数据对象进行任何操作,直到 T 释放 X 锁。简单来说,X 锁让事务独占该数据对象。

    举例:如果事务 T1 对“订单”表中的一条记录加上了 X 锁,那么其他事务(如 T2)不能对该记录进行读或写操作,直到 T1 释放该锁。

  • 共享锁(S 锁) :又称为读锁。当事务 T 对一个数据对象加上 S 锁后,其他事务可以继续对该数据对象加 S 锁,但不能加 X 锁。也就是说,多个事务可以同时读取数据,但不能修改数据。

    举例:事务 T1 对“用户信息”表中的一条记录加上 S 锁后,事务 T2 也可以对该记录进行读取操作,但不能修改。


锁的相容性

锁的相容性 决定了某个事务能否对已经被其他事务加锁的数据再加锁。如下所示:

image

  • Y 表示锁兼容,T1 可以成功加锁。
  • N 表示锁不兼容,T1 的加锁请求会被拒绝。

举例:如果 T2 对某数据加了 S 锁,T1 可以继续对该数据加 S 锁,但不能加 X 锁。


封锁粒度:如何选择封锁对象?

封锁粒度 指的是封锁对象的大小。从小到大,封锁粒度可以是属性值、元组、关系(表)、数据库等单位。

  • 粒度越小:并发度越高,但系统开销更大。
  • 粒度越大:并发度降低,但系统开销减少。

举例:如果一个事务只处理几条记录,那么以元组为封锁粒度较为合适;而如果处理大量记录,封锁整个可能更合适。


封锁协议:三级封锁协议详解

为了保证数据的一致性,数据库引入了封锁协议,规定了何时加锁、何时释放锁。常见的有三级封锁协议

一级封锁协议

  • 事务 T 在修改数据对象之前必须加 X 锁,直到事务结束才能释放 X 锁
  • 防止丢失修改,但不能防止读“脏”数据和不可重复读

举例:T1 对数据 A 加 X 锁,T2 必须等待 T1 释放锁后,才能对 A 进行操作。

二级封锁协议

  • 在一级封锁协议的基础上,事务 T 读取数据前必须加 S 锁,读完后立即释放
  • 防止丢失修改和读“脏”数据,但不能防止不可重复读

举例:T1 加 X 锁并修改数据,T2 在读取数据时加 S 锁,读完后释放 S 锁。

三级封锁协议

  • 在二级封锁协议的基础上,事务 T 读取数据后直到事务结束才释放 S 锁

  • 防止丢失修改、读“脏”数据和不可重复读

    image

举例:T1 加 S 锁读取数据后,T2 必须等待 T1 结束事务并释放锁,才能对数据进行修改。


活锁与死锁:并发控制的新挑战

尽管封锁技术能有效解决并发问题,但它也可能引发新的挑战,如活锁死锁

活锁

活锁 发生在某个事务一直处于等待状态,永远无法获得锁的情况。

死锁

死锁 是指多个事务互相等待对方释放锁,导致所有事务都无法继续执行。

举例:T1 获得了数据 A 的锁,T2 获得了数据 B 的锁。然后 T1 想要获取 B 的锁,T2 想要获取 A 的锁,结果两者互相等待,形成死锁。

image


解决死锁的策略

为了避免死锁,通常有两类方法:

  1. 死锁预防

    • 一次封锁法:事务必须一次性加锁所有需要的数据,但这可能降低并发度。
    • 顺序封锁法:所有事务按照一个固定的顺序加锁,避免互相等待。
  2. 死锁检测与解除

    • 超时法:如果一个事务等待的时间超过了某个时间限制,系统会认为发生了死锁,强制中止事务。

    • 事务等待图法:系统定期监控等待情况,如果发现事务之间存在循环等待,说明发生了死锁,系统将中止某个事务以解除死锁。

      • image

总结

封锁技术是数据库并发控制的核心手段。通过排它锁共享锁的使用,数据库可以有效地保证事务之间的隔离性,防止数据不一致问题的发生。而封锁协议则为封锁的使用提供了明确的规则,帮助我们解决丢失修改、读“脏”数据和不可重复读等问题。虽然封锁机制可能带来活锁死锁等挑战,但通过合理的预防和检测手段,我们可以有效应对这些问题。

  • 并发
    76 引用 • 73 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...