1.事务处理简介
1.单用户与多用户系统
根据能够并发地使用系统用户数量进行划分。
多道程序设计使得计算机同一时间可执行多个程序或进程。
系统单CPU,交替执行进程命令然后挂起,进程的并发是交替的。进程交替可使CPU始终处于繁忙状态,在等待I/O时间内执行另一个进程。
2.事务,读写操作和DBMS缓冲区
事务:构成数据库处理逻辑单元的可执行程序。开始事务和结束事务语句间所有的数据库访问操作都可看作是一个事务。只涉及数据检索为只读事务。 数据库基本可以看作命名数据项的一个集合。数据项的大小称为粒度。数据项为记录的某一个字段,一条记录或整个磁盘块。 事务包含的数据库访问操作包括: read_item(X):将命名为X的数据项读入命名为X的程序变量 write_item(X):将程序变量X的值写入 名为X的数据项中。 磁盘向主存传送的基本数据单元是一个块(blocak), 执行read_item(X)命令包括: (1)找到包含数据项X的磁盘块地址 (2)将该磁盘块复制到主存中的一个缓冲区(如果缓冲区不存在) (3)将数据项X从缓冲区复制到名为X的程序变量 执行write_item(X)命令包括: (1)找到包含数据项X的磁盘块地址 (2)将该磁盘块复制到主存中的一个缓冲区 (3)从命名为X的程序变量复制项X到它的缓冲区中的正确位置 (4)将更新后的块从缓冲区存储回磁盘,(第4步才会真正更新磁盘上的数据库) 在某些情况下,该缓冲区并不立即写入磁盘,因为还有可能对该缓冲区进行另外的修改。通常由DBMS的恢复管理器和底层操作系统协同控制,决定何时将主存的数据更新写回磁盘。 DBMS通常会在主存中维护大量的缓冲区。当缓冲区占满,需要借助某种缓冲区替换策略来选择替换哪个缓冲区。如果选中的缓冲区被修改,则在复用前,必须先将其写回磁盘。
3.并发控制的必要性
3.1更新丢失问题
当访问相同数据库项的两个事务的操作,以某种方式交替执行,从而导致某修数据库项的值不正确时,就会发生更新丢失问题。
例如:如果开始时X=80,(起初航班有80个预定座位),N=5,(T1航班从与X对应的航班中转移了5个座位到与Y对应的航班中。M=4(T2在X上预定了4个座位)
那么最终的结果应该是X=79.但是在上图交替执行过程中,最终结果是84,这是由于T1从X中移走5个座位的更新操作丢失了 )
3.2 暂时更新 (或脏读) 问题
事务更新了某个数据库项,接着由于某种原因事务故障了,然而所更新的项恢复原值之前,另一个事务便读取该项。
上图所示两个事务,T1更新了数据项X,在更新完成之前故障了,系统必须将X的值恢复为原值。但是在系统恢复之前,事务T2读取了X的暂存值,
而由于T1的故障使得该值不会永久记录在数据库中。T2读取的X值便称为脏数据,因为它是没有完成或者没有提交的事务产生的。该问题也被称为脏读
3.3 错误求和问题
如果一个事务在若干记录上计算一个聚集求和函数,而另一些事务正在更新期中的某些记录,则聚合函数可能计算了一些更新以后的值和一些更新之前的值。
3.4 不可重复度(幻读)
事务T需要两次读取同一个数据项,但是在两次读取操作的间隔中,另一个事务T改变了该数据项的值。因此,T在两次读取同一个数据项时读出了不同的值。例如:买车票