关键词不能为空

当前您在: 主页 > 英语 >

gamez多用户环境下的数据并发访问及数据一致性简介

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-01-28 01:48
tags:

gamez-小于或等于号

2021年1月28日发(作者:while是什么意思)



多用户环境下的数据并发访问及数据一致性简介




在只有单一用户的数据库中,


用户可 以任意修改数据,


而无需考虑同时有其他用


户正在修改相同的数 据。


但在一个多用户数据库中,


多个并发事务中包含的语句


可能



会修改相同的数据。数据库中并发执 行的事务最终应产生有意义且具备一


致性的结果。因此在多用户数据库中,对数据并发访 问(


data


concurrency


)及


数据一致性(


data consistency


)进行控制是两项极为重要的工作。



1


、数据并发访问指多用户同时访问相同的数据。



2


、数据一致性指系统中每个用户都能够取得具 备一致性的数据,同时还能够看


到自己或其他用户所提交的事务对数据的修改。



为了描述同时执行的多个事务如何实现数据一致性,


数据库研究人员定义了被称


为串行化处理(


seria lizability


)的事务隔离模型(


transacti on isolation


model


)。当所有事务都采取 串行化的模式执行时,我们可以认为同一时间只有


一个事务在运行(串行的),而非并发 的。



以串行化模式对事务进行隔离的效果很好,

< p>
但在此种模式下应用程序的效率将大


大降低。将并行执行的事务完全隔离意 味着即便当前只存在一个对表进行查询



query

< p>
)的事务,其他事务也不能再对此表进行插入(


insert


)操作了。总之,


为了满足实际要求,


我们需要在事 务的隔离程度与应用的性能之间找出一个平衡


点。



Oracle


支持两种事务隔离级别(


isolation


level


),使应用程序开发者在对事


务进行控制时 ,既能保证数据的一致性,又能获得良好的性能。



需要防止的现象和事务隔离级别



ANSI/ISO


SQL


标准



SQL92



定 义了四种事务隔离级别



transaction


isolation


level


), 这四种隔离级别所能提供的事务处理能力各不相同。这些事务隔离级


别是针对三种现象定 义的,在并发事务执行时,需要阻止这三种现象



中的一种


或多种发生。



三种需要阻止的现象(


preventable phenomena


)是:



1


、脏读取(


dirty

< p>
read


):一个事务读取了被其他事务写入但还未提交的数据。



2


、不可重复读取(


nonrepeatable read


):一个事务再次读取其之前曾经读取


过的数据时,发现数据已被其他已提交的事务修改或删除。



3


、不存在读取(


phantom r ead


):事务按照之前的条件重新查询时,返回的结


果集中包 含其他已提交事务插入的满足条件的新数据。



SQL92


标准中定义了四个隔离级别,


在各隔离级别中,


允许发生上述三种需要阻


止的现象中的一种或多种。详情见下表






现象



隔离级别



脏读取



不可重复读取



允许



不存在读取



允许



未提交读取(


read


uncommitted




允许





已提交读取(


read


不允许



committed








可重复读取


不允许




repeatable read








串行化


不允许




rerializable









允许



允许



不允许



允许



不允许



不允许



Oracle

< p>
支持三种事务隔离级别:


已提交读取,


串行化,< /p>


以及


SQL92


中没有包含


的只读模式(


read- only


mode


)。已提交读取是


Oracle


默认使用的事务隔离级


别。



Oracle


如何管理数据并发访问及数据一致性



Oracle


利用多版本一致性模型(


multiversion consistency model


),各种类


型的锁及事务 来管理多用户系统中的数据一致性(


data consistency


)。



多版本并发访问控制



Oracle


能够自动地实现一个查询的读一致性,即一个查询所获得的数据来自同

< br>一时间点(


single point in time


)(这也被称为语句级读一致性



statement- level read consistency


))。


Oracle


还能令一个事务内的所有


查询都具备读一致性(即事务级读一致性(

< p>
transaction-level read


consistency


))。



Oracle


利用回滚段中的信息生成一个能保证一致性的数 据视图。回滚段内保存


了未提交或最近提交的事务中所修改数据的原值。


下图展示了


Oracle


如何利用


回滚段实现语句级的读一致性。









在查询开始执行时,


将记录当前的系统变化编号



system


change


number



SCN








中,


记录的系统变化编号为


1002 3



当查询进行扫描时,


只会使用有效 的



observed


)数据块。如果 某个数据块内的数据被修改过(即数据块的


SCN



于查询开始执行时记录的


SCN




Oracle

< p>
将使用回滚段中的信息重建此数据块,


并以重建的数据块替代被修改的数据 块供查询使用。


因此,


查询的结果集只包含

查询开始执行时就已经提交的数据。


在查询执行时,


其他事 务修改的数据对此查


询来说是无效的,这保证了每个查询都能得到满足一致性的数据。< /p>



语句级读一致性




Oracle


强制实现语句级读一致性(


statement-level read consistency


)。这


保证了单一查询的结 果集来自一个时间点——即查询开始执行的时间。


因此,



个查询的结果集永远不会包含脏数据及此查询执行时其他事务提交的数据。

< br>在一


个查询执行期间,


只有在查询执行前提交的数据对此 查询才是可见的。


查询无法


看到其开始执行后提交的数据。



任何一个查询都能得到满足一致性的结果集,

< br>这保证了用户无需额外操作就能确


保数据一致性。


SELECT


,使用子查询的


INSERT


,及包含显式或隐式查询的



UPDATE



DELETE < /p>


语句,都能够保证数据一致性。上述语句通过一个查询



query


)来得到她们所需的满足一致性的结果集(分别使用


SELECT



INSERT



UPDATE



DELETE


语句)。



SELECT


语句是一个显式地查询,且其中可以包含嵌套查 询(


nested query


)或


连 接操作



join


operatio n




INSERT


语句中也能够使用嵌套查询。


UPDATE




DELETE


语句能够利用


WHERE


子句或子 查询进行限制,


只操作数据表内的部分数


据行。





INSERT



UPDATE


,及


DELETE


语句中包含的查 询能够获得一致性的结果集。


这些查询无法看到其所在


DML


语句对数据的修改。换句话说,这些查询只能看


到其所在


DML


语句开始之前的数据。



TIPS


:如果


SELECT



列表中存在


PL/SQL


函数,那么函数中包含的


SQL

< p>
语句将


遵从其自身的语句级读一致性,


而非其所在


SQL


的读一致性。


例如,



SELECT



句中的某个函数访问的表可能会在语句执行时被其他事务修改并提交。


此函数每


次执行时都将建立一个新的一致性视图(


snapshot


)。



事务一致性读



Oracle


还能够实现事务级读一致性(


transaction- level


read


consistency


)。


当一个事务运行在串行化模式(


seriali zable mode


)下时,则事务内所有数据


访问均反映的 是事务开始时的数据状态。


即事务内的所有查询对某个时间点来说


具备一致性,


但是运行在串行化模式下的事务能够看到事务自身对数据所作的修


改。事务级的读一致性能够保证可重复读取并可阻止出现不存在读取。



RAC


环境下的读一致性



RAC


系统采用缓存对缓存



cache- to-cache



的数据块传输机制


(此技术被称为



Cache


Fus ion


)在实例间传输满足读一致性(


read- consistent


)的数据块镜像。


RAC


系统通过高速度低延迟的内部连接



interco nnect



实现上述数据传输,


从< /p>


而满足实例之间对数据块的请求。



Oracle


事务隔离级别



Oracle


支持以下三种事务隔离级别(


transaction isolation level


)。



隔离级别



描述



Oracle


默认使用的事务隔离级别。事务内执行的查询


只能看到查询执行前(而非事务 开始前)就已经提交


的数据。


Oracle

< br>的查询永远不会读取脏数据(未提交


的数据)。




Oracle


不会阻止一个事务修 改另一事务中的查询正


在访问的数据,因此在一个事务内的两个查询的执行


间歇期间,数据有可能被其他事务修改。举例来说,


如果一个事务内同一查询 执行两次,可能会遇到不可


重复读取或不存在读取的现象。





串行化隔离的事务只能看到事务 执行前就已经提交的


数据,


以及事务内


INSERT



UPDATE




DELETE



句对数据的修改。串行化隔离的事务不会出现不可重


复读取或不存在读取的现象。



已提交读取



串行化



gamez-小于或等于号


gamez-小于或等于号


gamez-小于或等于号


gamez-小于或等于号


gamez-小于或等于号


gamez-小于或等于号


gamez-小于或等于号


gamez-小于或等于号



本文更新与2021-01-28 01:48,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/576059.html

多用户环境下的数据并发访问及数据一致性简介的相关文章

多用户环境下的数据并发访问及数据一致性简介随机文章