db2与oracle的性能优化,DB2和Oracle并发机制比较

DB2和Oracle在并发机制上到底有什么根本性的区别?总结起来,它们之间的区别主要体现在以下几个方面:

1.DB2在做数据修改时,在日志中既记录了修改前数据(也就是UNDO日志),也记录了修改后的数据(即REDO日志)。而Oracle在日志中记录修改后数据,而将修改前的数据记录到"回滚段"(ROLLBACK

SEGMENT)中。

UNDO信息也会记录在REDO中,也就是说ORACLE会把修改前的数据及其修改后的数据都记录在REDO中,以便实例失效的时候进行recovery

Jonathan Lewis 的新书Oracle Core Essential Internals for_DBAs and

Developer 第二章REDO AND UNDO进行了详解。

ORACLE修改数据大体有如下步骤:

1. Create the change vector for the undo record.

2. Create the change vector for the data block.

3. Combine the change vectors and write the redo record into the

redo log

(buffer).

4. Insert the undo record into the undo block.

5. Make the change to the data block.

2.在Oracle中,当一个应用程序对表以Insert、Update和Delete操作进行修改时,另外一个应用程序在读取该表时,会从回滚段中读取该表修改前的数据。而对于DB2

V9.7之前的版本,读取数据的应用程序,遇到正在被其他应用程序修改的数据时,将会进行锁等待(除非使用UR隔离级别)。对于DB2

V9.7及以后版本,由于引入了当前已落实,读取数据的应用程序将不需要等待锁释放,而是会从日志中读取数据修改前的版本(即已落实的版本,相当于Oracle回滚段中的数据)。

在旧的DB2里(DB2

9.7以前)是靠锁来解决并发问题的,这是一个阵营。而ORACLE在另一个阵营,使用MVCC。ORACLE叫UNDO。实践检验,MVCC胜出。读脏数据没有太大用处。

3.Oracle利用数据行上的标志位来实现锁机制,而DB2是通过把锁信息记录在锁列表(LOCKLIST)中来实现的。当请求加锁时,DB2会检查锁列表,看数据对象上是否已加锁,以及请求的锁与已加的锁是否兼容。

4.Oracle数据库中,对数据的读操作是不加锁的。而DB2强调"读一致性",在读数据行时,会根据隔离级别的不同而加S或IS锁,只有在使用UR隔离级别时才不加S或IS锁,这保证了不同应用程序和用户读取的数据是一致的。默认情况下,Oracle同一时刻不同的应用程序有读不一致的现象,而DB2在同一时刻所有的应用程序读到的数据都是一致的。

默认情况下,Oracle同一时刻不同的应用程序有读不一致的现象,这是因为ORACLE认为一致性指的是在开始读的时候的断片应该保持一致,也就是说一直到TRANSACTION的生命周期里,总是能读到一致的内容。

5.Oracle数据库中不存在锁升级,也不会出现由锁升级产生的死锁,而DB2数据库中当锁列表(LOCKLIST)被耗尽,或者单个事务锁占用的内存空间超过LOCKLIST×(MAXLOCKS/100)个页时会发生锁升级。

6.DB2缺省的隔离级是CS,对于大多数应用来说,缺省的CS级别可以满足需要。而Oracle缺省的隔离级别类似DB2的UR,读取数据和更新不会互锁(如果提高Oracle的隔离级别,也会产生互锁问题),但只能读到已提交的数据,无法得到最近修改(但暂时未提交)的版本。

7.DB2在UR隔离级别下,遇到正在被更改的数据会读最新的没有提交的脏数据;而Oracle在其所有的隔离级别(即read

committed、serializable以及read-only隔离级别)下都不会读取脏数据(在read

committed级别下,会从回滚段中直接读取修改前的曾经提交过的数据)。在一些应用里,需要读到最新的数据,也就是脏数据。对这两种方法严格来说并没有谁好谁坏,ANSI标准也并没有明确规定。

总结一下,对于并发控制,无论是DB2还是Oracle,都有自己的特色,只要合理地设计应用并配置好数据库参数,就能够满足绝大多数的需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值