从本章节开始,我将尝试由浅至深的和大家一起探索Oracle RAC的其中一核心技术-Oracle Cache Fusion,看看多个实例场景下,事务是如何并发运行的。在了解多实例场景前,我们还是非常有必要一起了解一些重要的概念及在单实例情况下Oracle是如何控制并发事务运行的。
为了实现事务并发运行时的数据一致性问题,数据库研究人员定义了一个称为可序列化的事务隔离模型。可序列化事务在一个环境中运行时,做到使其看起来好像没有其他用户在修改数据库中的数据。但这会带来新的问题,以可序列化模式运行许多应用程序时会严重损害应用程序TPS和吞吐。这种并发运行事务的完全隔离可能意味着一个事物无法执行插入另一个事物查询的表。所以这就要求我们在完美的事物隔离和性能之间进行折中取舍,Mysql提供多种事物隔离方式及多种存储引擎,让用户根据自己的业务类型、操作特点去自由选择。而Oracle则通过引入自己的多版本一致性模型和各种类型的锁和事务以实现性能和事物隔离的“最优解”。通过这种方式,数据库可以向多个并发用户展现对应版本的数据,所有版本的数据与时间点保持一致。通过实现不同版本的数据块同时存在,实现事务可以读取在查询所需的时间点提交的数据版本,并返回与单个时间点一致的结果。
数据块的持有模式:
NULL:null CR模式表示资源的持有者没有访问权限。对应的内存空间可以被重用,主要用于数据字典对象。
Exclusive:XCUR独占模式表示块的独占访问。这意味着资源持有者需要对块执行写操作,而其他资源无法对块进行写操作。但是,其他资源可以对块执行读取操作。
Shared:SCUR共享模式表示资源持有者在块上具有共享锁,并且正在执行读取操作。