OSC的原理
2015-10-09 12:11
363 查看
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张表,不允许新的数据产生。由于改名是一个很快的操作,因此阻塞的时间非常短。
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张表,不允许新的数据产生。由于改名是一个很快的操作,因此阻塞的时间非常短。
相关文章推荐
- centOS6.5安装tmux
- [LeetCode]: 153: Find Minimum in Rotated Sorted Array
- PHP程序员不应该忽略的3点
- [Leetcode] Perfect Squares
- I'll play a trick on you
- 如何判断多个线程是否共享资源
- Python——UnicodeEncodeError: 'ascii' codec can't encode/decode characters
- MySQL双机热备部署
- Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils
- web前端开发神器WebStorm编辑器
- linux-ubuntu之用户组和用户名
- e代驾——打造代驾服务标准化平台
- Tracert、Route 与 NBTStat的使用技巧
- 计算机软件基本概念
- 创建型模式之三——抽象工厂模式
- Android Studio 1.4 NDK 开发中Javah命令找不到类的解决方法
- java常用工具类(三)
- Android Studio项目结构
- 欢迎使用CSDN-markdown编辑器
- java常用工具类(二)