2008年(239)
分类:
2008-06-17 23:14:00
事务是构成单一逻辑工作单元的操作集合,数据库系统中的所有处理都以事务为单位。事务中的所有操作,要么全都执行,要么全都不执行。
事务具有原子性、一致性、隔离性、持久性四个特征,简称为ACID。原子性要求整个事务在逻辑上是一个整体,不可以分割;一致性要求事务对数据的更新,能够真实、正确地反映现实世界中的业务处理;隔离性保证多个事务的并发执行,事务之间不会互相影响;持久性保证事务所作的更新在事务完成后能够长久地反映在数据库中。
多个事务的并发执行、共享数据,给系统带来了以下问题:丢失更新、存取未落实的数据、不可重复读、幻像读现象。数据库系统使用并发控制机制,来解决这些问题。常见的并发控制机制有锁机制和多版本机制。
锁机制使用锁来实现事务的并发处理,常用的锁类型有:共享锁、排它锁、意向锁和更新锁。在不同级别上给数据加锁,锁的作用范围、影响到的数据量大小也不一样,可以将锁的粒度从高到低依次划分为:数据库、表、页、记录。事务对锁的申请并不总是成功,只有数据上不存在相冲突的锁时,锁才被授予。如果锁没能被授予,申请锁的事务就开始等待,一直到锁超时为止。
事务对一个数据只能拥有一个锁定,在需要更严格的锁定时,系统将进行锁的转换。系统中出现锁的升级,表明系统对锁的使用存在问题,需要进行调整。为了防止死锁的发生,可以采取死锁预防、死锁检测与恢复等策略。
两阶段封锁协议保证了事务调度的可串行性,使系统不会出现更新丢失问题。而四级的隔离级别,分别用来解决存取未落实的数据、不可重复读、幻像读现象问题。
多版本机制使用数据的多个版本来实现事务的串行化调度。系统对数据的更新操作,需要为数据创建一个新的版本;对数据的查询操作,选择数据的最近可用版本进行读取。
系统在任一时刻只允许一个事务对数据进行更新操作,避免了更新的丢失;查询操作所参照的数据版本不会被更新,有效地解决了存取未落实的数据、不可重复读、幻像读现象。
多版本机制有以下特性:读请求从不失败,且不必等待。但系统对多个数据版本的读取和维护,需要花费更多的CPU、内存、I/O、磁盘空间等系统资源。
多版本两阶段封锁机制,将多版本并发控制的优点与两阶段封锁协议的优点结合起来。该机制对只读事务与更新事务加以区分,要求更新事务执行强两阶段封锁协议。
DB2、INFORMIX、SYBASE系统的并发控制均使用锁机制,而ORACLE系统则采用多版本两阶段封锁机制。