
书:https://pan.baidu.com/s/14cPqfkAgg3VLKETfDcoVew?pwd=953k
数据库事务处理的艺术,核心在于事务管理与并发控制。以下是关于这两个主题的20个关键技术:
一、事务管理
- 事务定义:
- 事务是用户定义的一组数据库操作,是一个不可分割的工作单位。这些操作要么同时成功,要么同时失败。
- 事务特性(ACID):
- 原子性(Atomicity):事务中一系列操作是不可再分的工作单位。
- 一致性(Consistency):事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态。
- 隔离性(Isolation):一个事务的执行不能被其他事务所干扰。
- 持续性(Durability):一个事务一旦提交,该事务的操作结果永久有效。
- 事务控制语句:
- 开始事务:
BEGIN TRANSACTION
。 - 提交事务:
COMMIT TRANSACTION
。 - 回滚事务:
ROLLBACK TRANSACTION
。
- 开始事务:
- 显式事务与隐式事务:
- 显式事务:需要手动执行开始事务语句,才可以执行提交事务或回滚事务语句。
- 隐式事务:不需要执行开始事务语句,可以进行提交和回滚。
- 保存点:
- 使用
SAVE TRANSACTION
语句设置保存点,以便在事务中回滚到特定点。
- 使用
- 事务自动提交:
- 数据库默认设置为自动提交模式,即每个独立的SQL语句都被视为一个事务并自动提交。
二、并发控制
- 并发控制定义:
- 并发控制是确保及时纠正由并发操作导致错误的一些机制。
- 并发执行带来的问题:
- 丢失修改:两个事务读入同一数据并修改,导致一个事务的修改被丢失。
- 不可重复读:一个事务读取数据后,另一个事务执行更新操作,使前者无法再现前一次读取结果。
- 读“脏”数据:一个事务修改数据后,另一个事务读取该数据,但前者由于某种原因被撤销,导致后者读到的数据与数据库中的数据不一致。
- 封锁技术:
- 封锁是事务在对某个数据对象操作之前,先向系统发出加锁请求,加锁后事务对该数据对象有了一定的控制权。
- 基本锁的类型:
- 排它锁(X锁):允许事务读取和修改数据对象,其他事务不能读取和修改。
- 共享锁(S锁):允许事务读取数据对象,但不能修改;其他事务也只能读取,不能修改。
- 封锁粒度:
- 封锁对象的大小,可以是逻辑单元或物理单元。封锁粒度越小,并发度越高,系统开销越大;反之亦然。
- 多粒度封锁:
- 在多粒度封锁机制中,常采用粒度树管理封锁对象。一个结点加锁,隐含该结点的所有子节点也被加同样类型的锁。
- 意向锁:
- 对任意结点加锁时,必须先对其上层结点加意向锁。意向锁包括意向共享锁(IS锁)、意向排他锁(IX锁)和共享意向排他锁(SIX锁)。
- 封锁协议:
- 一级封锁协议:事务在读取数据时必须加锁,以防止其他事务修改数据。
- 二级封锁协议:在一级封锁协议的基础上,要求事务在插入、更新、删除数据时也必须加锁。
- 三级封锁协议:在二级封锁协议的基础上,要求事务在读取数据时不仅加共享锁,而且在修改数据时必须先升级到排他锁。
- 活锁与死锁:
- 活锁:由于事务间相互等待资源而导致的一种状态,其中没有事务能够继续执行。
- 死锁:两个或多个事务相互等待对方释放资源,导致它们都无法继续执行。
- 并发调度的可串行性:
- 可串行化:如果并发执行的事务与某个串行执行的事务具有相同的执行效果,则称这些并发事务是可串行化的。
- 两段式封锁协议:确保并发事务可串行化的一种协议,要求事务分为两个阶段:扩展阶段(只获得锁)和收缩阶段(只释放锁)。
- SQL Server并发控制语句:
- 包括锁的级别、锁的类型(如更新锁、架构锁)、SQL Server自动加锁功能、锁定提示以及隔离级别等。
- 时间戳并发控制:
- 每个事务在开始时都会获得一个唯一的时间戳,通过比较时间戳来决定事务的执行顺序。
- 乐观并发控制与多版本并发控制:
- 乐观并发控制假设冲突发生的可能性很小,在事务结束时检查冲突。
- 多版本并发控制为每个事务提供数据的快照,以避免读写冲突。
- 监控与调优:
- 定期对数据库进行监控,识别并发控制中的瓶颈,并进行调优。
- 事务隔离级别:
- 数据库系统提供了多种事务隔离级别,如未提交读、提交读、可重复读和可串行化等,以满足不同应用场景的需求。
- 避免长事务:
- 长事务会占用系统资源,增加死锁的风险,因此应尽量避免。
- 合理设计索引:
- 索引可以加速数据的检索速度,但也会增加写操作的开销。因此,应合理设计索引以平衡读写性能。
- 使用事务日志:
- 事务日志记录了事务的执行过程,可以用于数据恢复和故障排查。
- 数据库备份与恢复:
- 定期备份数据库可以保护数据免受硬件故障、灾难性事件或用户错误的影响。当出现数据丢失或损坏时,可以使用备份文件来进行数据恢复。
- 培训与教育:
- 定期对数据库管理员和开发人员进行培训和教育,提高他们的数据库事务管理和并发控制技能。
综上所述,数据库事务处理的艺术在于深入理解事务管理与并发控制的关键技术,并灵活运用这些技术来优化数据库性能、确保数据一致性和完整性。