`
zys08
  • 浏览: 142293 次
  • 性别: 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开发—从容转身(王飞鹏,李玉明) PDF高清扫描版

    第一部分从开发者遇到的问题进行分析,提出在oracle兼容模式下开发数据应用的新思路,并讲述了从oracle迁移到db2的方法、工具及案例。第二部分讲述了db2开发工具方面的知识,以及如何更有效地开发存储过程、用户...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    其三、职业方向多:Oracle数据库管理方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等方向。 四、 如何学习 认真听课、多思考问题、多动手操作、有问题一定要问、多参与讨论、多帮组同学 五、 体系结构 ...

    Oracle9i备课笔记——吕海东

    (1) 数据库技术:SQL Server, Oracle, DB2, Access, SQL, T-SQL, PL/SQL (2) 软件开发架构:J2SE, J2ME, J2EE, MS.NET (3) 开发语言: Java, C#.NET, J#.NET, VB.NET (4) Ineternet技术:HTML, XML, Web ...

    神通数据库-数据库快速入门.pdf

    库、Oracle、Microsoft SQL Server、IBM DB2、Microsoft Excel 97-2000、文本文件、其他支持 ODBC 的 数据源。在数据的转换过程中,向导能根据源数据和目标数据具体类型,通过内置的转换规则提供数据类型 的默认映射...

    Oracle数据库性能优化的艺术 (文平) 高清PDF扫描版

    《oracle数据库性能优化的艺术》内容高屋建瓴,用辩证法中的系统化分析方法,不仅从硬件(服务器系统、存储系统、网络系统等)、软件(操作系统、中间件系统、应用软件等)和应用场景(用户访问模式、用户使用频度、...

    存储白皮书(绝对内部资料)

    8.2 备份与拷贝、归档的区别 61 8.3 常规备份的实现方式 62 8.4 LAN Free和Serverless备份 63 8.5 主流备份软件和介质 64 8.6 备份技术新趋势 68 第9章 存储连接设备 71 9.1 HBA卡介绍 71 9.1.1 FC HBA相关知识: 71...

    分布式数据库系统体系结构.pdf

    2)分布式数据库系统体系结构 数据存储 分布式数据储存分为数据分布和数据分⽚。 数据分布: 数据分布也称为"数据分配",是指数据在计算机⽹络各场地上的分配策略。数据的分配策略主要有: 1. 集中式:所有数据均...

    数据库设计规范(1).doc

    2 适用范围 3 术语定义 DBMS:数据库管理系统,常用的商业DBMS有Oracle, SQL Server, DB2等。 数据库设计:数据库设计是在给定的应用场景下,构造适用的数据库模式,建立数 据库及其应用系统,有效存储数据,满足...

    分布式数据库系统复习材料.doc

    10、一个分布式数据库系统应用应该具有以下几种特点: (1)物理分布性:分布式数据库系统的数据具有物理分布性,这是与集中式数据库系统 的最大差别之一 (2)逻辑整体性:区别一个数据库系统是分散式还是分布式,...

    数据库系统概论自己版.xmind

    指定一个数据库模式作为一组关系模式的定义、指定存储结构、访问方法和一致性约束 DML 检索、插入、删除、更新 过程化DML:要求用户指定需要什么数据,以及如何获得这些数据 声明式DML:也称为...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    关于java程序员发展需要学习的路线整理集合 技术 应用技术 计算机基础知识 cpu mem disk ... 线程,进程 第三方库 ... 数据结构 ... 大数据与nosql ... 多线程与并发 ... 数据挖掘算法 ... 数据结构与算法 各种工具

    数据库管理系统(1).doc

    (4)数据的组织与存取:提供数据在外围储存设备上的物理组织与存取方法。 事务运行管理:提供事务运行管理及运行日志,事务运行的安全性监控和数据完整 性检查,事务的并发控制及系统恢复等功能。 (6)数据库的维护:...

    数据库管理系统(一)-真题无答案.docx

    实现定义数据库的模式,将数据库的结构以及数据的特性通知相应的DBMS从而生成存储数据的框架功能的是 ______。 A 数据操纵语言DML B 数据定义语言DDL C 程序设计语言 D 机器语言 4. 数据库系统是数据密集型应用...

    数据库管理系统DBMS在企业管理中的应用.doc

    数据组织、存储与管理:DBMS要分类组织、存储和管理各种数据,包括数据字典、 用户数据、存取路径等,需确定以何种文件结构和存取方式在存储级上组织这些数据, 如何实现数据之间的联系。数据组织和存储的基本目标是...

    WinSQL Professional v9.0.107.624 破解版

    例如,从Oracle到DB2或其他方式导出到文本文件从文本文件导入生成INSERT INTO现有的数据报表进口/出口手动或计划任务定期运行使用拖放-N-下降移动数据从一个源到另一个增强的数据和模式比较比较两个数据库之间的架构...

    getl:使用ETL和ELT流程轻松开发项目的框架,该框架可用于Micro Focus Vertica平台上的数据源和数据仓库

    在存储库中集中存储对数据源及其结构的描述的存储; 简化数据处理模式的开发。 支持的RDBMS IBM DB2,FireBird,H2数据库,Hadoop Hive,Cloudera Impala,MS SQLServer,MySql,IBM Netezza,NetSuite,Oracle,...

    大数据常用数据库汇总.pdf

    ⼤数据常⽤数据库汇总 通常数据库分为关系型数据库和⾮关系型数据库,关系型数据库的优势到现在也是⽆可替代的,⽐如MySQL、SQL Server、Oracle、 DB2、SyBase、Informix、PostgreSQL以及⽐较⼩型的Access等等数据库...

    大数据技术之Hadoop介绍.pdf

    数据被保存在⼀个关系型数据库(RDBMS)系统中,诸如Oracle数据库、 MS SQL Server或者DB2;同时,还需要编写复杂软件与这些数据库进⾏交互,处理所需数据,并向⽤户展⽰数据,以及数据分析。 该⽅案存在⼀定的限制...

    常见的关系型数据库管理系统.docx

    它采用标准的SQL结构化查询语言,支持多种数据类型,并提供面向对象的数据存储支持。它拥有第四代语言开发工具,支持UNIX、Windows NT、OS/2、Novell等平台。此外,它还具有良好的并行处理功能。Oracle产品主要包括...

Global site tag (gtag.js) - Google Analytics