oracle数据库表_笔记5:行迁移
行迁移
行迁移(row migration) 是指由于某一行变得太大,无法再与其余的行一同放在创建这一行的块中(块中已经放不下这一行),这就要求这一行离开原来的块。
迁移行(migrated row)就是这一行从最初所插入的块上移到另外的某个块上。为什么这会带来问题?你的应用绝对不会知道存在行迁移,你使用的SQL也没有任何不同。行迁移只会影响性能。如果你通过一个索引来读这一行,索引会指向原来的块,那个块再指向这个新块。要得到具体的行数据,一般并不是执行两个左右的I/O读取索引,再执行一个I/O读取表,实际上只需多执行一个I/O就可以得到行数据。单独来看,这不是大问题,甚至根本注意不到。不过,如果这种行所占的比例相当大,而且有大量用户在访问这些行,你就会注意到这种副作用了。访问这些数据的速度开始变慢(额外的I/O以及与I/O相关的闩定都会增加访问时间),缓冲区缓存的效率开始下降(需要缓存两个块,而如果行没有迁移就只需缓存一个块),另外表的大小和复杂性都有所增加。
有意思的是,如果一行从左边的块迁移到右边的块,而且它在将来某个时间点还要再迁移,Oracle会怎么做呢?造成这种又一次迁移的原因可能是:在这一行迁移到的“目标”块上又增加了其他的行,然后这一行再次更新,变得更大。Oracle实际上会把这一行迁移回原来的块,如果有足够的空间,仍放回原地(这么一来,这一行可能变得“未迁移”)。如果没有足够的空间,Oracle会把这一行迁移到另外的某个块上,并修改原来块上的转发地址。因此,行迁移总是涉及一层间接性。
本文来源 我爱IT技术网 http://www.52ij.com/jishu/5280.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
