
上QQ阅读APP看书,第一时间看更新
4.5 行迁移
行迁移是指某一行的数据量过大,导致该行无法存储在创建这一行的数据块中,此时Oracle就会使得该行离开原来的块,存储到另一个数据块中,该行的原始块和新块之间使用ROWID记录这种变迁关系,使得原始行知道后续数据存储的位置。
我们考虑某一行插入数据的情况,如果此时插入的数据过大,导致该行所在的数据块即使通过空闲空间合并也无法放下新插入的数据,此时Oracle就考虑使用行迁移,将无法放下的行数据插入新的数据块。行迁移是应该尽力避免的行为,在数据库设计时,就要根据业务数据类型、大小设置合理的数据库块大小,或者采用其他策略从应用来避免行迁移的发生。
行迁移带来的问题如下:
其实这个问题可以凭直接想象,读取某一行时,本来是通过一个数据块即可读取到,此时却需要从多个数据块读取,显然增加了I/O时间,同时对于这种跨行存储的数据块的维护也相对复杂,多个行链势必造成维护的开销。为有大量用户访问这种数据行时,由于多余的I/O以及和I/O相关的LATCH(缓存多个数据块),造成该数据行的访问效率下降会很明显。