作者简介:


黄玮(Fuyuncat)

资深Oracle DBA,个人网站www.HelloDBA.com,致力于数据库底层技术的研究,其作品获得广大同行的高度评价.

ROW MOVEMENT特性最初是在8i时引入的,其目的是提高分区表的灵活性——允许更新Partition Key。这一特性默认是关闭,只是在使用到一些特殊功能时会要求打开。除了之前提到的更新Partition Key,还有2个要求打开的ROW MOVEMENT的功能就是flushback tableShrink Segment

所以,只有当使用到以上3个功能特性时,ROW MOVEMENT才会真正起作用。我们如果需要知道ROW MOVEMENT会对系统产生什么影响,就只要看这3个功能使用时会产生什么影响。

Flashback Table

先看Flashback Table。这一功能能帮助我们及时回滚一些误操作,防止数据意外丢失。在使用该功能之前,必须先打开ROW MOVEMENT,否则就会抛ORA-08189错误。我们看以下例子,可以说明在使用Flashback Table功能时,ROW MOVEMENT产生了什么作用:

此时,由于ROW MOVEMENT还未打开,命令出错。继续完成演示:

当开启ROW MOVEMENT后,表被顺利的flashback了,数据被找回。此时,再比较flashback前后记录的ROWID,大多数记录的物理位置都变化。这个过程的内部操作, 可以通过对Flashback Table做SQL Trace来进一步观察。

通过Trace,我们不难发现,Flashback Table实际是通过Flashback Query将表中数据进行了一次删除、插入操作,因此ROWID会发生变化

Shrink Segment

Shrink Segment能帮助我们压缩数据段、整理数据碎片、降低高水位,以提高性能、节省空间。它也同样要求开启ROW MOVEMENT。

同样,我们可以看到在Shrink后,ROWID也变化了。从对其过程的Trace来看,Shrink对数据的改变不是通过SQL实现的,而是通过更底层的函数来实现的。

从以上分析来看,在执行上面2种操作操作后,其最大影响就是数据的ROWID会发生变化。因此,他们对我们系统的影响就仅限于那些依赖于ROWID编写的应用。

例如,一个程序需要对大量数据进行处理,为了提高效率和控制进度,代码会先将需要处理的数据记录的ROWID取出放入临时表中,然后再根据ROWID对数据进行分批进行处理。当ROWID被取出后,如果对表进行了上述操作,就可能会导致后依赖ROWID进行的操作发生错误。但是,这两种操作都属于维护性操作,第一种操作发生的机会非常少,从整体看,我们基本可以忽视这一操作对应用的影响;第二种操作也很少发生,并且可以在应用offline的时间进行操作,因此它的影响也是有限的。

更新Partition Key

在更新记录中的Partition Key时,可能会导致该记录超出当前所在分区的范围,需要将其转移到其他对应分区上,因此要求开启ROW MOVEMENT。

这一操作产生影响的特殊之处在于这是个DML操作,是和online transaction密切相关。对于这样一个UPDATE,实际上分为3步:先从原有分区将数据删除;将原数据转移到新分区上;更新数据。

其影响就在于以下几个方面:

  • 一个UPDATE被分解为DELET、INSERT、UPDATE三个操作,增加了性能负担。其中,DELETE的查询条件与原UPDATE的查询条件相同,新的UPDATE的查询条件是基于INSERT生成的新的ROWID;

  • 相应的Redo Log、Undo Log会增加;

  • 如果Update语句还涉及到了Local Index的字段的话,新、旧2个分区上的Local Index都要被更新。

结论

目前,ROW Movement真正会其作用(ROWID变化)只是在上述3种情况下,因此,需要分析其对系统会产生多大影响,就要分析上述三种操作在你的系统中出现的频率、以及是否有应用程序依赖与ROWID实现。

对于前面两种,之前说过,它们发生的概率并不高,我个人认为基本上可以忽略它们对系统的影响。而对于最后一种,需要从应用角度进行分析——Partition Key被更新的频率有多高?如果可能,最好实施一次等量负载下更细Partition Key的压力测试,通过对比分区和非分区下其产生的性能统计数据做比较,其带来的性能负载及Waits量与分区所获取的查询性能的提高相比,哪一种方式更有助于系统和应用的性能提高。

此外,有一点希望不要产生误解,开启ROW Movement并不会导致发生Row Migration时修改记录的Rowid。

还有一点,Row Movement会和域索引(Domain Index)产生冲突:如果表上定义了域索引,开启Row Movement就会失败;反之亦然。

推荐阅读:

遇见未来|DB舞台谁是王者之PostgreSQL专访

遇见未来 | 软件定义数据中心:人类文明运行在软件之上

对话张冬洪 | 全面解读NoSQL数据库Redis的核心技术与应用实践

遇见未来 | 超融合如何兼顾企业的“敏态”和“稳态”的业务需要

遇见未来 | 基于软件定义存储的数据加速解决方案:让你的系统加速跑

资源下载

关注公众号:数据和云(OraNews)回复关键字获取

‘2017DTC’,2017DTC大会PPT

‘DBALIFE’,“DBA的一天”海报

‘DBA04’,DBA手记4经典篇章电子书

‘RACV1’, RAC系列课程视频及ppt

‘122ARCH’,Oracle 12.2体系结构图

‘2017OOW’,Oracle OpenWorld资料

‘PRELECTION’,大讲堂讲师课程资料

深入解析:Row Movement 的原理和性能影响与关联相关推荐

  1. XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较

    6月20日 XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较  1:DOM     DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准.DOM 是以层次结 ...

  2. oracle 9i hwm,Oracle 10g HWM原理及性能优化

    摘 要: HWM(High Water Mark)是表中已经使用过的存储空间与未使用过的存储空间之间的分界线,HWM对全表扫描的性能有非常大的影响.当全表扫描时,Oracle会读取HWM下所有的块,即 ...

  3. oracle hwm调整语法,Oracle 10g HWM原理及性能优化

    摘  要: HWM(High Water Mark)是表中已经使用过的存储空间与未使用过的存储空间之间的分界线,HWM对全表扫描的性能有非常大的影响.当全表扫描时,Oracle会读取HWM下所有的块, ...

  4. php函数的实现原理及性能分析

    2019独角兽企业重金招聘Python工程师标准>>> 前言 在任何语言中,函数都是最基本的技术单元之一.对于php的函数,它具有哪些特点?函数调用是怎么实现?php函数的性能如何, ...

  5. tesseract 提升 速度_11 代酷睿低压处理器阵容解析:新工艺带来了哪些性能提升?...

    原标题:11 代酷睿低压处理器阵容解析:新工艺带来了哪些性能提升? 今年下半年,11 代酷睿低压处理器系列发布之后,其实大家都能看到,本次新低压系列 U 在性能上有做出大幅的提升.甚至英特尔官方还玩起 ...

  6. 浏览器渲染原理以及性能优化

    浏览器渲染原理以及性能优化 浏览器渲染原理 进程与线程 Request请求阶段 Response响应阶段 浏览器渲染网页注意事项 浏览器渲染网页阻塞顺序 DOM的重绘和回流 Repaint & ...

  7. LoRa学习:LoRa通信调制解调的实现原理与性能

    更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,一起学习探讨软硬件技术知识经验,关注就有海量学习资料免费领哦: LoRa学习:LoRa调制解调原理与性能 目录 LoRa学习:LoRa调制解 ...

  8. 【性能优化】MySQL 数据库连接原理和性能优化 - 学习/实践

    1.应用场景 学习MySQL数据库连接原理和性能优化, 开发高性能程序. 2.学习/操作 1. 文档阅读 MySQL 数据库连接原理和性能优化 - 高性能 MySQL 实战 | Laravel 学院 ...

  9. [转]iOS hybrid App 的实现原理及性能监测

    转自:http://www.cocoachina.com/ios/20151118/14270.html iOS hybrid App 的实现原理及性能监测 2015-11-18 11:39 编辑:  ...

最新文章

  1. SQL Server 2016新特性:Query Store
  2. 手动创建servlet
  3. 【NLP】NLP从业人员必须知道的十大必备知识库(附资料下载)
  4. 3d vision可以卸载吗_金属粉末可以用于3D打印,但这些知识你了解吗?
  5. Android——DDMS简单介绍
  6. linux system V IPC 信号灯和共享内存实例
  7. BZOJ 1303: [CQOI2009]中位数图【前缀和】
  8. npu算力如何计算_华为云郑叶来:多元算力驱动应用创新
  9. mybatis延迟加载(lazy)配置生效的陷阱
  10. Mysql安装及其配置
  11. arcgis 批量计算几何_GIS中的计算几何
  12. android root 升级失败怎么办,手机root失败怎么办 安卓手机root失败原因分析
  13. USYD悉尼大学INFO1110 详细作业解析Week4 revision(未更新完)
  14. 任天堂FC专题 (现在还有没有人对FC感兴趣? 红白机游戏汉化)
  15. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】
  16. 2017-2018-2 《密码与安全新技术》第一周作业
  17. layui表格table固定表头第一行固定显示
  18. Java获取两个日期之间的工作日天数
  19. 使用table2excel做excel表格下载
  20. 从外网打点到渗透内网域控 NASA

热门文章

  1. 英雄联盟欧洲赛区_Linux命令简介,欧盟的开源数学工具箱以及更多新闻
  2. 开源无人机_开源无人机,欧洲开源等等
  3. 明晰 | Java序列化与反序列化
  4. 计算机的英语谚语,英语谚语大全_2017考研:计算机专业考研复习要点_沪江英语...
  5. thinkphp u不加载css,解决ThinkPHP样式无法加载问题(CSS,JS)
  6. python os.walk遍历目录_Python 用 os.walk 遍历目录
  7. Luogu P1197 [JSOI2008]星球大战
  8. animate.css官网
  9. S7-300/400 系统 Profibus DP 通讯故障诊断实用方
  10. 听云数据库管理平台NetopGO简介