在数据库中,事务和锁定是重要性仅次于表之间关系的两个方面。使用锁定时一定要谨慎,并且在构建事务时也一定要仔细,这一点对任何数据库的完整性和性能都有好处。如果要创建的数据库必须并发执行大量命令,这两者都非常重要。
事务可以将 SQL 语句组合成逻辑工作单元。事务有两种结束方式,一种是回退所有已做更改,另一种是提交这些更改并将其永久应用到数据库中。
出现系统故障时,事务对数据恢复非常重要。它们在交错执行并发事务的语句中也扮演着关键角色。
要提高性能,必须并发执行多个事务。每个事务都由 SQL 语句组成。如果要并发执行两个或多个事务,数据库服务器必须调度各个语句的执行。并发事务可能会导致出现新的,不一致的结果,但如果依次执行相同的事务则不会出现这种结果。
可能会出现多种不一致,但有四种典型类型特别重要,因为 ISO SQL/92 标准中提到了这些类型,而且隔离级别也是依据它们定义的。
脏读 一个事务读取了由另一个事务修改但尚未提交的数据。
非可重复的读取 一个事务读取相同的行两次,但得到的值却不同。
幻像行 一个事务使用特定的条件执行了两次选择行的操作,但在第二次的结果集中发现了新行。
更新丢失 由于允许一个事务基于以前的数据保存更新,导致另一个事务对一行的更改完全丢失。
如果按调度执行事务时数据库达到的状态与依次执行各个事务时相同,那么这个调度就叫做可序列化调度。我们说,可序列化调度是正确的。可序列化调度不会造成以上任何一种不一致。
通过锁定,可以控制允许的干扰程度和类型。Adaptive Server Anywhere 提供了四个锁定级别:隔离级别 0、1、2 和 3。使用最高级别(级别 3)时,Adaptive Server Anywhere 可确保调度是可序列化的,意思是说,执行所有事务的结果与依次运行这些事务相同。
可惜的是,一个事务获取的锁定可能会阻碍其他事务的进程。由于这个问题,只要较低隔离级别可能会引起的不一致是可以忍受的,就应使用较低的级别。通过较高的隔离级别来提高数据一致性常常意味着并发性会降低,也就是说,数据库处理并发事务的效率会降低。常常需要在一致性与性能之间找到平衡点,从而确定适合各个操作的隔离级别。
如果不同事务的锁定要求之间发生冲突,可能会导致阻塞或死锁。Adaptive Server Anywhere 具有用于处理这两种情况的机制,并为您提供了用于控制它们的选项。
但是,使用较高隔离级别的事务也不总会影响并发性。只有在其他事务需要访问被锁定的行时才会受到阻碍。可以通过仔细设计数据库和事务来提高并发性。例如,可以通过把一个事务分割成两个较短的事务来缩短持有锁定的时间,或者,您可能会发现添加索引可以让事务以较高的隔离级别运行,而放置的锁定反而会减少。
由于便携式计算机越来越普及,因此可能需要对数据库进行复制。复制是 Adaptive Server Anywhere 提供的一项便利功能,但伴随它也产生了一些与并发有关的新问题。我们将在另一本手册中对这些主题进行讨论。
SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。