oracle大表添加字段default经验分享
2016-12-15 15:07
260 查看
当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';更新存量数据可放到业务较少的凌晨跑。
http://blog.itpub.net/29827022/viewspace-1593139/
本帖以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';更新存量数据可放到业务较少的凌晨跑。
http://blog.itpub.net/29827022/viewspace-1593139/
相关文章推荐
- 【转载】oracle大表添加字段default经验分享
- 分享一下学习Oracle的经验
- [转 逆水行船]Oracle中创建表,创建序列,创建自增字段,添加注释, 添加记录,添加触发器,提交
- oracle 添加字段时判断字段是否已经存在
- 表、字段命名的经验分享,这直接关系到整个系统的基础、公司规范、团队沟通协调、开发效率等方面
- oracle 构造添加字段的SQL语句
- Oracle数据库Date类型字段读写经验、查看Oracle字符集及修改字符集
- SQL经验分享(二)取得数据库中所有的表名、字段名以及字段属于哪个表
- Oracle PL/SQL处理CLOB字段的经验
- oracle添加字段引起的问题
- ORACLE经验分享
- oracle添加自增字段
- 表、字段命名的经验分享,这直接关系到整个系统的基础、公司规范、团队沟通协调、开发效率等方面
- oracle更改字段长度,添加字段
- oracle中数据表字段的添加和移除
- 【经验分享】Sqlserver和Oracle混合事务
- Oracle中使用語句添加或刪除字段
- 分享下我的z_blog模版 Google广告添加经验。
- Oracle中创建表,创建序列,创建自增字段,添加注释, 添加记录,添加触发器,提交
- Mysql、SqlServer和Oracle 添加修改删除字段