大表添加字段时需要注意default问题
来源:互联网 发布:system.out linux 输出 编辑:程序博客网 时间:2024/06/07 17:03
当oracle单表数据量上亿时,对表进行alter table aa add column_1 varchar2(2) defalut 'Y';时,效率及安全性是必须考虑的因素。
本帖以2亿的数据表aa举例:
alter table aa add column_1 varchar2(2) defalut 'Y';
Table altered
Executed in 3600 seconds
直接用了一个小时,而且在这过程中是加上了表级锁,也就是连查询都是会被等待的,这是相当危险的操作。
为什么会这样,原来oracle在执行上面语句时不仅要更新数据字典,还会刷新全部的记录。一次update 2 亿条数据当然需要一个小时,并且还会导致undo空间暴涨。
如果我们把更新数据字典和更新字段值分开,会不会好一点?
alter table aa add column_1 varchar2(2);
Table altered Executed in 0.016 seconds
alter table aa modify column_1 varchar2(2) defalut 'Y';
Table altered
Executed in 0.003 seconds
答案是快100万倍,那效果呢?经测试发现在第二种方法不会更新以前的数据,我们可以自己写一个匿名块循环update,一次commit 10000条,达到效率与安全的完美结合。
结论:alter table add 语句加上defalut时会刷新存量数据并产生表级锁,需慎用。特别是大表,生产环境,业务产生期间就应该禁止此操作。
改为add table add不带缺省值,接着来个alter table aa modify column_1 varchar2(2) defalut 'Y';更新存量数据可放到业务较少的凌晨跑。
本帖以2亿的数据表aa举例:
alter table aa add column_1 varchar2(2) defalut 'Y';
Table altered
Executed in 3600 seconds
直接用了一个小时,而且在这过程中是加上了表级锁,也就是连查询都是会被等待的,这是相当危险的操作。
为什么会这样,原来oracle在执行上面语句时不仅要更新数据字典,还会刷新全部的记录。一次update 2 亿条数据当然需要一个小时,并且还会导致undo空间暴涨。
如果我们把更新数据字典和更新字段值分开,会不会好一点?
alter table aa add column_1 varchar2(2);
Table altered Executed in 0.016 seconds
alter table aa modify column_1 varchar2(2) defalut 'Y';
Table altered
Executed in 0.003 seconds
答案是快100万倍,那效果呢?经测试发现在第二种方法不会更新以前的数据,我们可以自己写一个匿名块循环update,一次commit 10000条,达到效率与安全的完美结合。
结论:alter table add 语句加上defalut时会刷新存量数据并产生表级锁,需慎用。特别是大表,生产环境,业务产生期间就应该禁止此操作。
改为add table add不带缺省值,接着来个alter table aa modify column_1 varchar2(2) defalut 'Y';更新存量数据可放到业务较少的凌晨跑。
0 0
- 大表添加字段时需要注意default问题
- 【转载】oracle大表添加字段default经验分享
- 向list中添加对象时需要注意的问题
- 大数据量导出到Excel时需要注意的问题
- 大数据量导出到Excel时需要注意的问题
- 大并发量需要注意的问题
- 大表添加字段、索引
- 利用DBCA添加RAC新增节点时需要注意的一个问题
- cocos2dx xcode添加资源时可能出现的错误以及需要注意的问题
- 动态添加表单元素需要注意的一个问题
- WINCE添加新字体需要注意的一些问题
- 自定义Panel中添加依赖属性需要注意的问题
- C++需要注意的细节问题(无限期添加)
- WINCE添加新字体需要注意的一些问题
- python list列表添加元素需要注意的问题
- RadioButton动态添加以及需要注意的问题
- 中国人的十大需要注意的问题
- 10大需要注意的web app问题
- Java设计模式——六大原则
- Fragment间的通信
- 理解Fragment生命周期
- 黑马程序员——java面试题之基础语法
- 了解IOS沙盒... NSTemporaryDirectory()
- 大表添加字段时需要注意default问题
- 黑马程序员——java基础面试题之面向对象
- 2015-2016 一坨写程序的工程汪 要出发,
- 常见结构体...
- Oracle 11g R2安装手册(图文教程)For Windows
- NSNumber的使用
- hadoop文件系统的目录结构及datanode不能启动
- Java注解实践
- NSValue的使用...@encode(type)...int strcmp(const char *, const char *); 返回 0 表示相等