Oracle行迁移的影响

行迁移不能避免,增加每个块的大小可以减少行迁移的可能行,但也会造成更大的空间浪费。这个平衡点需要根据应用不同进行确定。

“行迁移”,Oracle的数据按照块保存,如果一块数据磁盘空间无法保存某个数据时(比如以前是1K,现在update到2K,而当前块的空闲空间不足1K),则会将新的数据保存到另外一个新的块里,然后在以前的块保存一个新位置的地址连接。

  比如

  数据都保存在一个块里面,中间有2块的空闲空间,现在第四行数据要扩容。发现单块的空闲空间不足,则评估合并的空闲空间是否满足

  评估合并后的空闲空间依然不满足空间要求,则此时发生“行迁移”

  在一个新的块保存了新的第四行数据,然后在原始块保存了新地址的连接。这就是行迁移的过程。

  2 行迁移有什么影响呢?

  如果你通过一个索引来读这一行,索引会指向原来的块,那个块再指向这个新块。要得到具体的行数据,一般并不是执行两个左右的I/O 就可以得到行数据。单独来看,这不是大问题,甚至根本注意不到。不过,如果这种行所占的比例相当大,而且有大量用户在访问这些行,你就会注意到这种副作用了。访问这些数据的速度开始变慢(额外的I/O 以及与I/O 相关的闩定都会增加访问时间),缓冲区缓存的效率开始下降(需要缓存两个块,而如果行没有迁移就只需要缓存一个块),另外表的大小好复杂性都有所增加。由于这些原因,你可能不希望迁移行。

时间: 2024-07-29 11:21:52

Oracle行迁移的影响的相关文章

行链接和行迁移的秘密

一.概述:  如果你的Oracle数据库性能低下,行链接和行迁移可能是其中的原因之一.我们能够通过合理的设计或调整数据库来阻止这个现象.    行链接和行迁移是能够被避免的两个潜在性问题.我们可以通过合理的调整来提高数据库性能.本文主要描述的是:    什么是行迁移与行链接    如何判断行迁移与行链接    如何避免行迁移与行链接   当使用索引读取单行时,行迁移影响OLTP系统.最糟糕的情形是,对所有读取操作而言,增加了额外的I/O.行链接则影响索引读和全表扫描.    注:在翻译行(row

行链接(Row Chaining)和行迁移(Row Migration)

行链接(Row Chaining)和行迁移(Row Migration) 一.概述:   如果你的Oracle数据库性能低下,行链接和行迁移可能是其中的原因之一.我们能够通过合理的设计或调整数据库来阻止这个现象.      行链接和行迁移是能够被避免的两个潜在性问题.我们可以通过合理的调整来提高数据库性能.本文主要描述的是:     什么是行迁移与行链接     如何判断行迁移与行链接     如何避免行迁移与行链接   当使用索引读取单行时,行迁移影响OLTP系统.最糟糕的情形是,对所有读取操

Oracle数据库中行迁移/行链接学习(一)什么是行迁移/行链

在实际的工作中我们经常会碰到一些Oracle数据库性能较低的问题,当然,引起Oracle数据库性能较低的原因是多方面的,我们能够通过一些正确的设计和诊断来尽量的避免一些Oracle数据库性能不好,Row Migration (行迁移) & Row Chaining (行链接)就是其中我们可以尽量避免的引起Oracle数据库性能低下的潜在问题.通过合理的诊断行迁移/行链接,我们可以较大幅度上提高Oracle数据库的性能. 那究竟什么是行迁移/行链接呢,先让我们从Oracle的block开始谈起.

oracle的行迁移和行链接

定义: 行迁移:因为update.将行变长.原来的块已经放不下了.行被挪进新块. 行链接:行一开始就太大.比如你插入了1w个字节的行.必须要分两个块存放. 由此.行变长的时间先后可作为判断依据 产生场景: 行迁移 Oracle会将整行的数据迁移到一个新的数据块上,而将该行原先的空间只放一个指针,指向该行的新的位置,并且该行原先空间的剩余空间不再被数据库使用,这些剩余的空间我们将其称之为空洞,这就是产生表碎片的主要原因,表碎片基本上也是不可避免的,但是我们可以将其降到一个我们可以接受的程度.注意,

Oracle数据库中行迁移/行链接学习(三)行迁移/行链接的清除方法

由于对于行链接来说只能增大db_block_size来清除,而db_block_size在创建了数据库后又是不能改变了的,所以这里对行链接的清除不做过多的叙述了,主要是针对行迁移来谈谈在实际的生产系统中如何去清除. 对于行迁移的清除,一般来说分为两个步骤:第一步,控制住行迁移的增长,使其不在增多:第二步,清除掉以前存在的行迁移. 众所周知,行迁移产生的主要原因是因为表上的pctfree参数设置过小导致的,而要实现第一步控制住行迁移的增长,就必须设置好一个正确合适的pctfree参数,否则即使清除

Oracle数据库中行迁移/行链接学习(二)行迁移/行链接的检测方法

通过前面的介绍我们知道,行链接主要是由于数据库的db_block_size不够大,对于一些大的字段没法在一个block中存储下,从而产生了行链接.对于行链接我们除了增大db_block_size之外没有别的任何办法去避免,但是因为数据库建立后db_block_size是不可改变的(在9i之前),对于Oracle9i的数据库我们可以对不同的表空间指定不同的db_block_size,因此行链接的产生几乎是不可避免的,也没有太多可以调整的地方.行迁移则主要是由于更新表的时候,由于表的pctfree参

从SQL SERVER 向ORACLE 8迁移的技术实现方案

oracle|server  不知道从哪里得到这个文档,有用就放上来了 -gwb  数据库端SQL语法的迁移以下为常用的SQL语法迁移,包括数据类型.ID列向SEQUENCE迁移.表(主键.外键.CHECK.UNIQUE.DEFAULT.INDEX).游标.存储过程.函数.触发器.常用SQL语法与函数几个方面,考虑SQL SERVER的实际情况,没有涉及ORACLE特有的PACKAGE.EXCEPTION等.在以下的描述中,将SQL SERVER的TRANSACT-SQL简称为T-SQL.在OR

Oracle Optimizer:迁移到使用基于成本的优化器-----系列1.2

oracle|优化 Oracle Optimizer:迁移到使用基于成本的优化器-----系列1.2 3.2基于成本的优化器(CBO) 基于成本优化器遵循计算代价的方法学.所有的执行计划随成本标识,优化器选择成本最低的一个.在执行计划中,较高的成本将意味着较高的资源.成本越低,对查询来说越高效.CBO使用所有存储在数据字典中可用的统计资料信息和柱状图,用户提供提示和的参数设置来达成使用的成本,CBO生成所有可能访问方法的排列然后选择最合适的.排列的数量依赖于查询中出现的表数量,有时能达到约80,

数据库行迁移和行连接详解

当往数据库中插入(INSERT)数据的时候,块中的自由空间会减少:当对块中已经存在的行进行修改(UPDATE)的时候(使记录长度增加),块中的自由空间也会减少. DELETE语句和UPDATE语句会使块中的自由空间增加.当使用DELETE语句删除块中的记录或者使用UPDATE语句把列的值更改成一个更小值的时候,Oracle会释放出一部分自由空间.释放出的自由空间并不一定是连续的.通常情况下,Oracle不会对块中不连续的自由空间进行合并.因为合并数据块中不连续的自由空间会影响数据库的性能.只有当