并发控制原理
事务之间的相互影响可能导致数据库状态的不一致,即使各个事务能保持状态的正确性,而且也没有任何故障发生。因此,不同事务中各个步骤的执行顺序必须以某种方式进行规范。控制这些步骤的功能由DBMS的调度器部件完成,而保证并发执行的事务能保持一致性的整个过程称为并发控制。调度器的作用如图1所示。
首先讨论如何保证并发执行的事务能保持数据库状态的正确性。抽象的要求称为可串行性,另外还有一个更强的、重要的条件为冲突可串行性,它是大多数调度器所真正实现的。我们考虑实现调度器的最重要技术:封锁、时间戳和有效性确认。
1.串行调度和可串行化调度
1.1 调度
调度是一个或多个事务的重要操作按时间排序的一个序列。
例1 考虑两个事务以及它们的动作按照某些顺序执行时的数据库的影响。T1和T2的重要动作如表1所示。
表1 两个事务
T1
|
T2
|
READ(A,t)
|
READ(A,s)
|
t := t + 100
|
s := s*2
|
WRITE(A,t)
|
WRITE(A,s)
|
READ(B,t)
|
READ(B,s)
|
t := t + 100
|
s := s*2
|
WRTIE(B,t)
|
WRITE(B,s)
|
1.2 串行调度
如果一个调度的动作首先是一个事务的所有动作,然后是另一个事务的所有动作,以此类推,而没有动作的混合,那么我们说这一调度是串行的。
例2 对表1中的事务而言,两个串口调度,一个是T1在T2前,而另一个是T2是T1之前,初态为A=B=25。
表2T1在T2前的串行调度
T1
|
T2
|
A
|
B
|
|
|
25
|
25
|
READ(A,t)
|
|
|
|
t := t + 100
|
|
|
|
WRITE(A,t)
|
|
125
|
|
READ(B,t)
|
|
|
|
t := t + 100
|
|
|
|
WRTIE(B,t)
|
|
|
125
|
|
READ(A,s)
|
|
|
|
s := s*2
|
|
|
|
WRITE(A,s)
|
250
|
|
|
READ(B,s)
|
|
|
|
s := s*2
|
|
|
|
WRITE(B,s)
|
|
250
|
表3 T2在T1前的串行调度
T1
|
T2
|
A
|
B
|
|
|
25
|
25
|
|
READ(A,t)
|
|
|
|
t := t + 100
|
|
|
|
WRITE(A,t)
|
50
|
|
|
READ(B,t)
|
|
|
|
t := t + 100
|
|
|
|
WRTIE(B,t)
|
|
50
|
READ(A,s)
|
|
|
|
s := s*2
|
|
|
|
WRITE(A,s)
|
|
150
|
|
READ(B,s)
|
|
|
|
s := s*2
|
|
|
|
WRITE(B,s)
|
|
|
150
|
1.3 可串行化调度
事务的正确性原则告诉我们,每个串行调度都将保持数据库状态的一致性。
通常,不管数据库初态怎样,一个调度对数据库状态的影响都和某个串行调度相同,我们就说这个调度是可串行化的。
例3 表4是例1中事务的一个调度,此调度是可串行化的,但不是串行的。表5不是可串行化的。
表5 一个非串行的可串行化调度
T1
|
T2
|
A
|
B
|
|
|
25
|
25
|
READ(A,t)
|
|
|
|
t := t + 100
|
|
|
|
WRITE(A,t)
|
|
125
|
|
|
READ(A,s)
|
|
|
|
s := s*2
|
|
|
|
WRITE(A,s)
|
250
|
|
READ(B,t)
|
|
|
|
t := t + 100
|
|
|
|
WRTIE(B,t)
|
|
|
125
|
|
READ(B,s)
|
|
|
|
s := s*2
|
|
|
|
WRITE(B,s)
|
|
250
|
表6 一个非可串行化的调度
T1
|
T2
|
A
|
B
|
|
|
25
|
25
|
READ(A,t)
|
|
|
|
t := t + 100
|
|
|
|
WRITE(A,t)
|
|
125
|
|
|
READ(A,s)
|
|
|
|
s := s*2
|
|
|
|
WRITE(A,s)
|
250
|
|
|
READ(B,s)
分享到:
Global site tag (gtag.js) - Google Analytics
|
相关推荐
通过深入理解并发控制的原理并合理应用相关策略,数据库管理员和开发者可以构建出既高效又稳定的数据库系统。记住,有效的并发控制是提升数据库性能和用户体验的关键。 本文提供了对数据库并发控制的全面介绍,包括...
Linux大神Paul McKenney的作品《深入理解并发编程》对并发编程的各种概念进行了详细介绍。该书深入探讨了内存屏障(Memory Barriers)和互斥锁(Mutual Exclusion, mutex)等关键技术。内存屏障是一种同步机制,可以...
数据库并发控制机制是确保数据一致性和完整性的关键技术。通过理解悲观并发控制、乐观并发控制和多版本并发控制的原理和实践,开发者可以设计...随着技术的发展,对数据库并发控制机制的深入理解和应用将变得更加重要。
本音频同步教程将详细讲解这些概念和技术,帮助自学者深入理解数据库并发控制的重要性及其实现方法。通过学习,你将能够理解和应用这些知识来设计和管理高并发的数据库系统,确保数据的一致性和系统的稳定性。
本实验旨在让学生深入理解并发控制的原理和常见问题,如脏读。 数据库并发控制的主要目标是解决在多事务环境下可能出现的四个主要问题:脏读(Dirty Read)、不可重复读(Non-repeatable Read)、幻读(Phantom ...
总的来说,理解数据库的分类和原理,能够帮助开发者选择最适合项目需求的存储解决方案。关系型数据库适合需要复杂查询和事务处理的场景,而非关系型数据库则在大数据、实时分析和高并发环境下更具优势。缓存组件如...
在数据库系统中,并发控制是确保多个用户同时访问数据库时,数据的完整性和一致性不受影响的关键...通过深入理解并发控制背后的原理和各种技术,我们可以更好地设计和优化数据库系统,以应对日益增长的并发访问需求。
通过解答这些真题和模拟试卷,考生可以深入理解数据库系统的运作机制,例如如何使用SQL进行数据操作,如何设计符合第三范式的表结构,如何处理并发冲突,以及如何实现数据库的安全访问。此外,这些试题还可能涉及...
通过学习这本书,读者可以全面理解数据库的工作原理,掌握设计和管理数据库的技能,以及如何将这些原理应用于实际的应用系统开发中。对于计算机专业的学生、软件开发者以及任何需要处理大量数据的工作者来说,这是一...
04735《数据库系统原理》历年真题集是一个重要的学习资源,它包含了自考试开始以来至2019年10月的所有试题,旨在帮助考生深入理解和掌握数据库系统的概念、设计、实现以及管理等方面的知识。这个压缩包中的文件很...
2022年4月的线上实践题与自学考试大纲为学习者提供了深入理解和掌握数据库系统核心概念的机会。下面将详细阐述相关知识点。 首先,实践题是检验理论知识转化为实际操作能力的关键环节。20220427的数据库系统原理...
这份"数据库系统原理课后答案"涵盖了以上所有主题的详细解答,对于学习者深入理解数据库系统原理、提高解题能力大有裨益。通过深入研究这些答案,不仅可以巩固课堂所学,还能为实际项目中的数据库设计和管理打下坚实...
数据库系统原理是信息技术领域中的核心课程,尤其对于中级和高级软件考试来说,深入理解数据库系统的概念、设计与管理是至关重要的。本资料“中级高级软考!! PDF 数据库系统原理”旨在帮助考生全面掌握数据库系统的...
【04735自考数据库系统原理】是高等教育自学考试计算机科学与技术专业的一门重要课程,旨在帮助考生深入理解和掌握数据库系统的基础理论、设计方法以及应用技术。这门课程的内容涵盖了数据库系统的基本概念、数据...
这个主题广泛而深入,涵盖了关系型数据库、非关系型数据库、数据模型、查询语言、事务处理、并发控制和数据恢复等多个方面。下面将详细讨论这些关键知识点。 1. **数据模型**:数据模型是描述数据结构和数据之间...
数据库系统原理是计算机科学中的一个核心课程,主要探讨如何存储、组织、管理和检索数据...务必认真对待每一道题,深入理解其背后的原理,并尝试在实践中应用,这对于未来从事数据库相关的开发或管理工作都将大有裨益。
本课件是高等教育领域推荐的教材,旨在通过理论与实践相结合的方式,帮助学生深入理解和掌握数据库的相关知识。 首先,我们要理解数据库的基本概念。数据库(Database)是一个组织和存储数据的系统,它能提供数据的...
通过解决这些习题,你可以深入理解如何设计和操作数据库,例如如何编写有效的SQL查询语句,如何处理并发问题,以及如何优化数据库性能。这些习题答案可以作为自我评估的工具,也可以作为复习资料,帮助你在准备考试...