论文部分内容阅读
当今社会,网络技术发展的相当迅速,数字资源得到高效率共享,但这也使数据库系统面临着更大的信息处理压力。数据库系统主要有两方面职责,一方面它要能够尽可能多的将信息资源共享出去,致力于提高系统效率,另一方面数据库系统必须保证系统内数据的准确性和安全性。数据库的事务处理系统可以实现多个事务并发执行,因为事务并发执行的方式有很多串行执行方式不可比拟的优点:第一,事务并发执行的方式可以提高吞吐量和资源利用效率。一个事务由若干个操作组成,有的操作是进行计算,需要CPU资源,而有的操作是进行数据库的读写,即磁盘I/O。而这两个资源是独立的,所以如果一个事务进行计算时另一个事务正好执行读或写操作,就可以让CPU和I/O系统并行操作,这种方式大大的提高了系统的吞吐量以及计算机系统中磁盘的利用率。第二,采取并发执行事务的方式也有效缩短了用户在事务执行上等待所需要的时间。数据库系统中运行的事务是各种各样的。有的事务很长,如生成一个复杂的报表;有的事务则很短,可能只进行一个简单的查询。当短事务遇到长事务时,如果不能并发执行,势必要等待长事务完成后才能执行,这种等待是难以预测的,用户可能非常厌烦,一致不能够接受。并发执行则可以避免这样的事情发生,减少查询的平均响应时间。然而,事实上,大多数的并发调度都会导致数据库状态不一致,人们把这类并发调度称为错误的并发调度,错误的并发调度会导致数据库系统产生故障。数据库的并发操作通常会带来3个问题。首先,当两个事务对同一数据库进行写操作时,前一个事务对数据库的操作会被后一个事务对数据库的修改覆盖掉,这种问题称为“丢失修改”。其次,并发调度错误会导致不可重复读,即事务T1需要两次读取同一数据项A,但是如果在两次读操作的时间间隙当中,另外一个事务T2执行了写操作,改变了A的数值,这就会导致在调度T1中,两次读取同一数据项A的值,却得到并不相同的结果。不仅如此,当事务采用并发的方式执行时,很有可能会导致“脏读”。“脏读”既是某一事务读取了另一个不成功执行事务的数据,“脏读”会破坏数据库的完整性。丢失修改、不可重复读、脏读等会给数据库造成非常巨大的危害,可串行化的概念就是在这种时代背景下应运而生了,可串行化的概念的提出,为并发执行事务的一致性提供了保障。当事务的并发调度对数据库状态的改变和某一个串行调度相同的时候,那么这个并发调度也能保证数据库状态的一致,这样的并发调度就是人们寻找的、正确执行的调度,这样的调度称为可串行化或可串行化调度。现代数据库事务处理系统支持多个事务在同一时间内共同被执行,这就对数据库系统的性能提出了新的要求,要求数据库系统的并发控制部件能够对并发调度加以判断,执行可以并发执行的调度,拒绝不可并发执行的调度。这样可以有效的保证数据库中数据总是处于一致的状态,这就要求并发执行的事务之间是必须是可串行化的。数据库系统中事务管理的重要任务之一就是对事务的可串行化进行检测这是保证数据库系统中多个事务能高效地、正确地并发执行的有效手段。对事务的可串行化进行检测的作用主要是协调同一时间访问同一数据库文件的多个事务之间的关系,预防并发执行的事务之间相互冲突,允许可串行化调度并发执行,不予许不可串行化调度并发执行。当事务调度数目较少时,可以通过检查一个调度中任何两个冲突操作的顺序,并确定其是否与冲突等价的串行调度中的事务的顺序相同。如果相同,就意味着该调度是可串行化调度。然而,当事务调度数目较多较复杂时,要判断事务调度是否满足可串行化条件,较为复杂。本文从关系运算的代数方法出发,提出了基于事务执行优先关系的闭包运算和由此建立的联合逻辑公式的计算,通过逻辑判定来检验并发事务的可串行化。通过定理证明和实例验证,所提出的基于逻辑公式的代数判定方法取得了同执行图判定相同的效果,而且判定更直观,更易于操作实现不需要建立图模型和在图搜索中检测环是否出现。利用事务执行优先关系的逻辑公式判定可串行化,在减少事务冲突检测次数方面做出了突破性贡献,有利于提高事务执行的并发性,与此同时,保证了事务调度的是可串行化的。