首页 理论教育 事务与并发控制在计算机软件开发与应用研究中的重要成果

事务与并发控制在计算机软件开发与应用研究中的重要成果

时间:2023-10-17 理论教育 版权反馈
【摘要】:事务的开始与结束可以由用户显式控制。COMMIT表示提交,即提交事务的所有操作。并发控制就是为了保证事务间的隔离性。事务是数据库并发控制和恢复的基本单位。以上这些工作都由数据库管理系统中的恢复和并发控制机制完成。

事务与并发控制在计算机软件开发与应用研究中的重要成果

▶4.3.1.1 事务

▶1.事务的基本概念

数据库中的数据是共享的资源,因此允许多个用户同时访问相同的数据。当多个用户同时对同一段数据进行增、删、改等操作时,如果不采取任何措施,则会造成数据异常。事务就是为防止这种情况的发生而产生的概念。

事务(Transaction)是数据库系统中执行的一个工作单位,它是由用户定义的一组操作序列。一个事务可以是一组SQL语句、一条SQL语句或整个程序,一个程序可以包括多个事务。一个事务内的所有语句作为一个整体,要么全部执行,要么全部不执行。

事务的开始与结束可以由用户显式控制。如果用户没有显式地定义事务,则由数据库管理系统按照默认规定划分事务。在SQL中,定义事务的语句有三条:

BEGIN TRANSACTION;

COMMIT;

ROLLBACK;

事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。COMMIT表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有操作全部撤销,回退到事务开始的状态。这里的操作是指对数据库的更新操作。

▶2.事务的特征

事务具有4个特征,即原子性(Atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。这4个特征也简称为事务的ACID特征。

(1)原子性

事务的原子性是指事务是数据库的逻辑工作单位,一个事务是一个不可分割的工作单位。事务在执行时,应该遵守“要么都做,要么都不做(Nothing or All)”的原则,即不允许完成部分的事务。即使因为故障而使事务未能完成,它执行过的部分也要被取消。

(2)一致性

事务的一致性是指事务执行的结果必须是使数据库从一个一致性状态转到另一个一致性状态。所谓数据库的一致性状态,是指数据库中的数据满足完整性约束。也就是说,两个操作要么全做,要么全不做,否则就不能成为事务。因此,事务中的操作如果有一部分成功,一部分失败,为避免数据库产生不一致状态,系统会自动将事务中已完成的操作撤销,使数据库回到事务开始前的状态。可见事务的一致性和原子性是密切相关的。

(3)隔离性

事务的隔离性是指数据库中一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他事务是隔离的,并发执行的各个事务不能相互干扰。并发控制就是为了保证事务间的隔离性。

(4)持久性

事务的持久性也称为永久性(permanence),指事务一旦提交,则其对数据库中数据的改变就是永久的,以后的操作或故障不会对事务的操作结果产生任何影响。事务是数据库并发控制和恢复的基本单位。

保证事务的ACID特性是事务处理的重要任务。事务的ACID特性可能遭到破坏的因素如下:

①多个事务并行运行时,不同事务的操作有交叉情况;

②事务在运行过程中被强迫停止。

在情况①下,数据库管理系统必须保证多个事务在交叉运行时不影响这些事务的原子性。在情况②下,数据库管理系统必须保证被强迫终止的事务对数据库和其他事务没有任何影响。

以上这些工作都由数据库管理系统中的恢复和并发控制机制完成。

▶3.事务处理模型

事务有两种类型:一种是显式事务,另一种是隐式事务。隐式事务是指每一条数据操作语句都自动地成为一个事务,显式事务是有显式的开始和结束标记的事务。对于显式事务,SQL Server采用的处理模型是显式开始和显式结束,即每个事务都有显式的开始和结束标记。

事务的开始标记是BEGIN TRANSACTION(TRANSACTION可简写为TRAN),事务的结束标记有如下两个。

①COMMIT[TRANSACTION|TRAN]:正常结束。

②ROLLBACK[TRANSACTION|TRAN]:异常结束。

▶4.3.1.2 并发控制

事务的ACID特性可能遭到破坏的原因之一是多个事务对数据库的并发操作造成的。并发控制就是为了确保ACID特性,而对并发事务采取的封锁和调度等控制技术。

▶1.并发问题(www.xing528.com)

(1)更新丢失

当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新的问题。每个事务都不知道其他事务的存在,最后的更新将重写由其他事务所做的更新,这将导致数据丢失。

例如,两个编辑人员制作了同一文档的电子复本。每个编辑人员独立地更改复本,然后保存更改后的复本,这样就覆盖了原始文档。最后保存的复本覆盖了第一个编辑人员所做的更改。如果在第一个编辑人员完成之后第二个编辑人员才能进行更改,则可以避免该问题。

(2)脏读

当第二个事务选择其他事务正在更新的行时,会产生未确认的相关性问题。第二个事务正在读取的数据还没有确认并且可能被更新此行的事务更改。

例如,一个编辑人员正在更改电子文档,在更改过程中,另一个编辑人员复制了该文档(该复本包含了到目前为止所做的全部更改)并将其分发给预期的用户。之后,第一个编辑人员认为目前所做的更改是错误的,于是删除了所做的编辑并保存了文档,则分发给用户的文档包含不再存在的编辑内容,并且认为这些编辑内容从未存在过。如果在第一个编辑人员确定最终更改前任何人都不能读取更改的文档,则可以避免该问题。

(3)不可重复读

当第二个事务多次访问同一行而且每次读取不同的数据时,会产生不一致的分析问题。不一致的分析与未确认的相关性类似,因为其他事务也是在更改第二个事务正在读取的数据。然而,在不一致的分析中,第二个事务读取的数据是由已进行更改的事务提交的。而且,不一致的分析涉及多次(两次或更多)读取同一行,每次信息都由其他事务更改,因此该行被多次读取时值不一样,造成了不可重复读的问题。

例如,一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改,原始读取不可重复。如果只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免该问题。

(4)幻象读

当对某行执行插入或删除操作,而该行处于某个事务正在读取的行的范围时,会产生幻象读问题。事务第一次读的行范围显示其中的一行已不复存在,第二次读或后续读中,该行已被其他事务删除。同样,由于其他事务的插入操作,事务的第二次或后续读显示有一行已不存在于原始读中。

例如,一个编辑人员更改作者提交的文档,但当生产部门将其更改内容合并到该文档的原复本时,发现作者已将未编辑的新材料添加到该文档中。如果在编辑人员和生产部门完成对原始文档的处理之前,任何人都不能将新材料添加到文档中,则可以避免该问题。

▶2.并发控制方法

当许多人同时试图修改数据库内的数据时,必须执行控制系统以使某个人所做的修改不会对他人产生负面影响,这称为并发控制。

并发控制理论因创立并发控制的方法不同而分为两类。

(1)悲观并发控制

锁定系统阻止用户以影响其他用户的方式修改数据。如果用户执行的操作导致应用了某个锁,则直到这个锁的所有者释放该锁,其他用户才能执行与该锁冲突的操作。该方法主要用在数据争夺激烈的环境中,或用在当出现并发冲突时,用锁保护数据的成本比回滚事务的成本低的情况下,因此称该方法为悲观并发控制。

(2)乐观并发控制

在乐观并发控制中,用户读数据时不锁定数据。在执行更新时,系统进行检查,查看另一个用户读过数据后是否更改了数据。如果另一个用户更新了数据,将产生一个错误。一般情况下,接收错误信息的用户将回滚事务并重新开始。该方法主要用在数据争夺少的环境中,以及偶尔回滚事务的成本超过读数据时锁定数据的成本的情况下,因此称该方法为乐观并发控制。当锁定用作并发控制机制时,它可以解决并发问题。在多用户环境中,为了防止事务之间的相互影响,提高数据库数据的安全性和完整性,数据库系统提供了隔离机制,使所有事务可在彼此完全隔离的环境中运行,且任何时候都可以有多个正在运行的事务。

事务准备接受不一致数据的级别称为隔离级别。隔离级别是一个事务必须与其他事务进行隔离的程度。较低的隔离级别可以增加并发,但代价是降低数据的正确性;相反,较高的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。应用程序要求的隔离级别确定了SQLServer使用的锁定行为。

SQL—92定义了下列四种隔离级别,SQL Server支持所有这些隔离级别:

①未提交读(事务隔离的最低级别,仅保证不读取物理损坏的数据)。

②提交读(SQL Sever默认级别)。

③可重复读。

④可串行读(事务隔离的最高级别,事务之间完全隔离)。

可串行性是通过运行一组并发事务达到的数据库状态,等同于这组事务按某种顺序连续执行时所达到的数据库状态。

如果事务在可串行读隔离级别上运行,则可以保证任何并发重叠事务均是串行的。

表4-2描述了各种事务隔离级别中各种并发问题发生的可能性。

表4-2 事务隔离级别与并发问题的可能性

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈