博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OSC的原理
阅读量:5098 次
发布时间:2019-06-13

本文共 826 字,大约阅读时间需要 2 分钟。

OSC是Online Schema Change简写,即在线架构改变。其实现步骤:

1. init,即初始化阶段,会对创建的表做一些验证工作,如检查表是否有主键,是否存在触发器或者外键等。

2. createCopyTable,创建和原始表结构一样的新表。
3. alterCopyTable,对创建的新表进行Alter table操作,如添加索引或列等。
4. createDeltasTable,创建deltas表,该表的作用是为下一步创建的触发器所使用。之后对原表的所有DML操作会被记录到createDeltasTable中。
5. createTriggers,对原表创建insert、update、delete操作的触发器。触发操作产生的记录被写入到detltas表。
6. startSnpshotXact,开始OSC操作的事务。
7. selectTableIntoOutfile,将原表中的数据写入到新表。为了减少对原表的锁定时间,这里通过分片将数据输出到多个外部文件,然后将外部文件的数据导入到copy表中。分片的大小可以指定,默认值为500000.
8. dropNCIndexs,在导入到新表前,删除新表中所有的辅助索引。
9. loadCopyTable,将导出的分片文件导入到新表。
10. replayChanges,将OSC过程中原表DML操作的记录应用到新表中,这些记录被保存在deltas表中。
11. recreateNCIndexs,重新创建辅助索引
12. replayChanges,再次进行DML日志的回放操作,这些日志是在上述创建辅助索引过程中新产生的日志。
13. swapTables,将原表和新表交换名字,整个操作需要锁定2张表,不允许新的数据产生。由于改名是一个很快的操作,因此阻塞的时间非常短。

转载于:https://www.cnblogs.com/life91/p/4863585.html

你可能感兴趣的文章
Unity之fragment shader中如何获得视口空间中的坐标
查看>>
支持向量机——内核
查看>>
MFC注册热键
查看>>
万能的SQLHelper帮助类
查看>>
uboot分析:uboot的启动过程分析
查看>>
tmux的简单快捷键
查看>>
springboot笔记04——读取配置文件+使用slf4j日志
查看>>
[Swift]LeetCode653. 两数之和 IV - 输入 BST | Two Sum IV - Input is a BST
查看>>
[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
查看>>
微信小程序的wxml文件和wxss文件在webstrom的支持
查看>>
Html5 离线页面缓存
查看>>
[php]在PHP中读取和写入WORD文档的代码
查看>>
WCF傻瓜模式写程序
查看>>
《绿色·精简·性感·迷你版》易语言,小到不可想象
查看>>
Java Web学习总结(13)Listener监听器
查看>>
开始Flask项目
查看>>
Ruby:多线程队列(Queue)下载博客文章到本地
查看>>
Android打包key密码丢失找回
查看>>
03 jQuery动画
查看>>
医药箱APP静态小项目
查看>>