简单了解行迁移的影响

本文解释了Oracle数据库中“行迁移”的概念及其发生的原因,并探讨了它对数据库性能的影响。当数据更新导致原有存储块空间不足时,Oracle会将数据迁移到新块并建立链接。这种现象可能导致额外的I/O操作,降低缓存效率,并增加表的复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 行迁移的原因

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

[img]http://dl.iteye.com/upload/attachment/241120/7faca646-3551-34eb-a47e-f8fe3e6884b4.png[/img]

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

[img]http://dl.iteye.com/upload/attachment/241122/a0ffa704-0341-35ee-8c7d-0eddc3502216.png[/img]

  评估合并后的空闲空间依然不满足空间要求,则此时发生“行迁移”
[img]http://dl.iteye.com/upload/attachment/241124/fac64e33-f344-351d-b1a9-a5923d9bc1d1.png[/img]
  在一个新的块保存了新的第四行数据,然后在原始块保存了新地址的连接。这就是行迁移的过程。
  2 行迁移有什么影响呢?
  如果你通过一个索引来读这一行,索引会指向原来的块,那个块再指向这个新块。要得到具体的行数据,一般并不是执行两个左右的I/O 就可以得到行数据。单独来看,这不是大问题,甚至根本注意不到。不过,如果这种行所占的比例相当大,而且有大量用户在访问这些行,你就会注意到这种副作用了。访问这些数据的速度开始变慢(额外的I/O 以及与I/O 相关的闩定都会增加访问时间),缓冲区缓存的效率开始下降(需要缓存两个块,而如果行没有迁移就只需要缓存一个块),另外表的大小好复杂性都有所增加。由于这些原因,你可能不希望迁移行。

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

转于:http://oracle.chinaitlab.com/exploiture/797757.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值