`
zys08
  • 浏览: 146300 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

DB2与ORACLE数据存储模式的区别[转]

 
阅读更多

DB2与ORACLE数据存储模式的区别[转]

今天正巧看到一篇BLOG,题为《索引组织表中逻辑ROWID的物理猜》,这名字挺新鲜的,花些功夫看了一下,对理解DB2 for z/OS和ORACLE在这一技术细节上的区别很有收获。
“Oracle的普通表即堆表,存储数据时没有顺序可言,而Oracle的索引组织表是根据主键顺序来存储表中的数据的。”
--记得第一次得知ORACLE的这个特性时,几欲昏倒,不啻是对数据库世界观的颠覆。意识到原来这两种主流的RDBMS竟然能有如此大的区别。对于ORACLE而言,大多数表的数据存储是没有顺序的;而对于DB2,大多数表的数据存储是按照聚簇索引(Cluster Indxe)来排序的,也就是说,DB2中大多数的表按照ORACLE的分类规则都属于索引组织表。对于DB2,唯一的例外情况就是这个表没有索引——只要哪怕有一个索引,即便这个索引没有被显式地指定为Cluster Index,DB2仍然会尽量按照这个索引的键顺序来存储表中的数据。

“对于普通表而言,Oracle保证数据插入到表中之后,数据的物理地址ROWID不会再发生改变。当然对表进行MOVE,或者ENABLE ROW MOVEMENT之后对分区表的分区键值进行修改等明确导致表数据位置发生变化的操作除外。也就是说,普通的增、删、改不会导致现有记录的物理地址发生变化。即使记录的长度发生了变化,导致当前数据块中无法容纳这条记录,Oracle也会在原位置上留下一个ROWID信息,通过这个ROWID信息可以找到这条记录的新的位置。这也就是行迁移、行链接的实现方式。虽然增加了额外的IO,但是确保了ROWID不发生变化。”
--这就是所谓的Position Update,即普通的Update不会改变记录的物理位置。当然也有例外,那就是:1,记录所属表分区改变,那么记录肯定要移动到目标分区对应的物理文件中,位置改变在所难免;2,记录本身是变长记录,这里的变长是指“物理变长”,不仅指含有变长字段(Variable Length)的记录,而且也指表属性为COMPRESS YES的记录(因为DB2 z的DATA COMPRESS是ROW COMPRESS),当变长记录Update时,物理长度可能会变化,通常缩短都没问题,仍然可以做到Position Update,但是如果增长的话,有可能原来的物理位置没有足够的空间存放增长后的记录,所以记录只能重新去寻找一个合适的空间安身,而在原来的物理位置存放一个指向新位置的指针(当然,指针本身肯定很短,原位置足够存放得下),这就称为Overflow。也就是原来ROWID指向的物理位置是一个指针,指针指向新位置(或者也可能指向另一个指针,但最终会指向记录实际的物理位置,从而形成一个较长的指针链(Pointer Chain),当然这种情况对性能的伤害会更大)。
“可以看到,前面提到的MOVE,以及一些导致ROWID发生变化的分区操作,在使得ROWID变化的同时,也会导致索引处于不可用状态。”
--问题来了。ROWID变化怎么会导致索引处于不可用状态呢?在DB2中,记录的物理位置变化,或者ROWID的改变,对应的Index Entry会跟着改变。换句话说,如果一个update涉及索引字段(index key columns)的改变,那么这个update至少包含两部分内容,即对表的更新和对索引的更新。
“那么现在存在一个问题,对于索引组织表而言,为了保证数据存储是根据主键顺序进行的,就必须根据数据的增、删、改随时调整表中数据的位置,这使得ROWID不发生改变这个前提无法实现。而对于索引组织表,第二个索引需要一个方法来找到表中数据的具体位置,因此也就有了逻辑ROWID。”
--技术的差异体现在这里了。对索引组织表,ORACLE严格保证数据存储按索引顺序排列,也就是说在记录修改时,在前端就调整记录的位置。而DB2则不然,DB2是尽量去保证数据按照索引顺序排列(聚簇),但并不严格和强求,记录如果不能存放到最佳位置(按索引排序的理想位置),可以存放到附近的次佳位置或偏离最佳位置更远。随着记录修改越多,聚簇的效率(Cluster Ratio)也就越差,所以需要重组(REORG utility),也就是DB2在后端通过重组来调整记录的位置。因此,REORG在DB2中远比ORACLE中来的重要。
然而,在DB2的世界,第二个索引,或者叫次索引(Secondary Index),非聚簇索引(Non-Clustered Index),仍然是通过记录的ROWID来找到记录的物理位置,没有逻辑ROWID的概念。只是,一个聚簇效率完好(Cluster Ratio=100)的索引,从索引的Leaf page上的entry通过ROWID指向数据data page的关系好比是梳理过的,顺序排列的(如下图上方的索引IX所示)。而非聚簇索引的entry到表data page的关系是乱序的(如下图下方的索引IX2所示)。即便重组,也只会使表的记录按照聚簇索引的顺序重新排列,上方索引的Cluster Ratio=100,而不会使下方非聚簇索引的Cluster Ratio有质的改变。

对于索引组织表,虽然存储位置可能会经常发生变化,但是主键是必须存在的。如果不能通过物理位置来寻找,那么通过主键来查找也可以找到这条记录。不过Oracle的实现并不是这么简单。 逻辑ROWID除了包含表的主键信息外,还包括了这条记录在索引创建时的物理地址信息。关于逻辑ROWID相信结构描述,可以参考:http://yangtingkun.itpub.net/post/468/11363。而这个地址信息,就是用来实现物理猜的。如果物理猜能够在目标数据块中找到这条记录,那么这个效率和物理ROWID的效率是一样的,只需要一次IO就找到了目标。如果通过物理猜找不到对应的记录,那么Oracle只能通过逻辑ROWID中包含的主键信息,通过主键扫描来定位这条记录,根据索引的层高,这个操作可能会多消耗几次IO操作。”
--对于DB2,通常情况下,记录的存储位置并不容易发生变化,update也是Position Update为主,尽管这是对cluster规则的一种破坏,但是DB2依靠后端的REORG来进行修复,而换取的好处是记录在前端进行修改的性能。无论是聚簇索引还是非聚簇索引,DB2都通过ROWID来直接定位到记录的物理位置,因此始终是物理ROWID,而无逻辑ROWID的概念。依据引文的观点,ORACLE的次索引的逻辑ROWID包含索引创建时记录的物理位置。但是,当记录发生多次update后,这个逻辑ROWID能命中的概率会显著下降,不得不借助主键(Primary Key)信息再绕回到聚簇索引上去定位数据记录的位置。这里有两个问题值得注意:1,ORACLE为了维护cluster规则,记录进行修改时前端的性能会相对较差;2,即便这样,cluster规则仍然会被破坏,逻辑ROWID的命中率较低,而必须多做几次I/O,也就是从非聚簇索引再绕回聚簇索引。因此,ORACLE对聚簇索引的依赖度更高。
结论
DB2总是通过ROWID来定位记录的物理位置,无论是聚簇索引还是非聚簇索引都一样;ORACLE通过聚簇索引的ROWID来定位记录的物理位置,非聚簇索引的ROWID也包含主键信息以利用聚簇索引,但是采用了“物理猜”作为一个捷径,即寄希望于记录的物理位置在非聚簇索引创建后不改变。
可见,DB2的表数据的存储大多数都是按索引排序的,而ORACLE表数据的存储大多数是无序的(这是多么巨大的差异啊)。对这种索引组织表的应用,会有一些限制(比如更适合只读表,等等),而update性能会较差。
分享到:
评论

相关推荐

    DB2与Oracle 体系架构

    标题:DB2与Oracle体系架构 描述:本文深入解析了IBM DB2与Oracle数据库系统在体系架构上的异同,旨在为数据库管理员、架构师及IT专业人员提供深度洞察,帮助理解两种主流数据库技术的核心差异。 ### 一、DB2与...

    DB2和 Oracle的并发控制

    【并发控制】在数据库系统中,特别是在DB2和Oracle这样的大型企业级数据库中,是确保多用户环境下数据一致性的重要机制。并发控制通过引入【锁】技术来防止事务间的冲突,保证ACID特性得以实现,即原子性(Atomicity...

    DB2,Oracle连接字符串

    与DB2不同,Oracle连接字符串在某些情况下可以直接通过添加相应的类库实现,因为Oracle提供了 thin 客户端模式,这种模式不需要在本地安装完整的Oracle客户端。例如,对于.NET应用,只需要引用Oracle....

    oracle 与DB2 的比较

    ### Oracle与DB2的主要区别及比较 随着信息技术的迅速发展,企业对于数据管理的需求日益多样化。面对这样的背景,本文旨在对比两大主流关系型数据库管理系统(RDBMS)——Oracle与DB2之间的区别,帮助读者更好地...

    oracle转DB2 对照

    ### Oracle转DB2对照知识点详解 #### 1. Oracle SQL PL 和 DB2 inline SQL PL (内嵌) 比较 ##### 1.1 创建存储过程 - **Oracle**: 支持 `CREATE OR REPLACE` 语法,允许在已有存储过程的基础上进行替换。 ```sql ...

    Oracle转换DB2指导手册

    Oracle与DB2作为市场上两大主流的关系型数据库管理系统(RDBMS),它们之间存在着许多差异,包括数据类型、存储结构、查询语言等。本指导手册将详细介绍在DB2开启Oracle兼容模式后,如何进行Oracle到DB2的平滑迁移。 ...

    DB2兼容模式设置文档

    本文档主要介绍如何将IBM DB2数据库设置为Oracle兼容模式,并列举了一些关键的验证点,包括数据类型、SQL语法特性的差异、公共视图和存储过程等。通过这些验证点,可以确保在DB2上运行原本为Oracle设计的应用程序时...

    ibm db2电信行业数据挖掘红皮书

    在电信行业中,DB2能够处理海量的通话记录、客户信息、账单数据等,确保数据的安全存储和高效访问。 2. 数据挖掘基础:数据挖掘是从大量数据中发现有价值信息的过程,涉及模式识别、关联规则学习、聚类分析和预测...

    Sybase、DB2、Oracle 优劣分析

    - **独特的XML管理模式**:DB2 V9支持XML数据类型和管理,能够有效地存储和检索XML格式的数据。 - **自带Developer Workbench综合开发环境**:内置的开发环境为开发者提供了完整的开发工具链,包括代码编写、调试等...

    oracle 与db2比较

    综上所述,Oracle和DB2在组件构成、数据类型支持、架构布局、存储管理、日志备份恢复选项以及管理工具等方面存在着明显的差异。企业在选择合适的数据库系统时,应根据自身的需求和技术背景综合考虑这些因素。尽管两...

    oracle与db2的区别.docx

    ### Oracle与DB2的区别 #### 一、系统结构概述 Oracle和DB2作为两种主流的关系型数据库管理系统(RDBMS),各自拥有独特的架构设计。理解这两种数据库系统的结构差异对于优化性能、选择合适的数据库平台至关重要。...

    Oracle to DB2 Conversion Guide for Linux, UNIX, and Windows

    - **DB2 Universal Database**:提供了一种通用的数据存储方式,支持多种操作系统环境。 - **DB2 Warehouse Manager**:专注于数据仓库和商业智能(BI)应用。 - **DB2 Connect**:主要用于连接和访问DB2数据库的工具...

    ORACLE数据库迁移DB2手册

    * DB2_COMPATIBILITY_VECTOR:一个用于设置 DB2 实例的兼容模式的参数,用于匹配 Oracle 的行为。 * DB2_DEFERRED_PREPARE_SEMANTICS:一个用于设置 DB2 实例的重新验证语义的参数,用于不按依赖次序部署对象。 * ...

    DB2_vs_Oracle

    通过以上分析可以看出,DB2与Oracle在架构、存储管理、日志与备份恢复选项等方面存在显著差异。尽管两者都提供了丰富的特性和工具,但它们的设计理念和技术实现有所不同。选择适合自己的数据库系统取决于具体的应用...

    Oracle DBA如何管理DB2

    - 存储过程:Oracle中的存储过程与DB2中的有所不同。在Oracle中,存储过程是一组预编译的SQL语句,可以包含控制流语句,而在DB2中也有类似的概念,但具体实现和语法可能略有不同。 - 日志生成:Oracle采用redo ...

    oracle db2 sql server

    这些数据库系统在IT领域中广泛用于数据存储、管理和处理,尤其在企业级应用中扮演着重要角色。 **Oracle数据库** Oracle数据库是全球最大的数据库供应商Oracle公司提供的产品,它支持多种操作系统和硬件平台。...

    Oracle 数据库 10g 与 IBM DB2 UDB 技术概述

    《Oracle数据库10g与IBM DB2 UDB技术概述》一文旨在对比分析Oracle数据库10g和IBM DB2 UDB两大主流企业级数据库管理系统的关键技术特性,为IT专业人士提供全面的技术参考。以下是对该文章核心知识点的深入解读: ##...

    Oracle数据仓库架构.ppt

    Oracle数据仓库架构是构建高效、可靠的数据存储和分析解决方案的关键组成部分。它旨在支持大规模的数据整合、处理和洞察,为企业决策提供及时、准确的信息。在Oracle的数据仓库架构中,涉及多个关键组件和技术,包括...

Global site tag (gtag.js) - Google Analytics