在线生产系统执行 alter table add column type default x ;的分析
2015-07-27 22:15
751 查看
今天开发提交了一个sql:
alter table T_STUDENT add student_auth NUMBER(1) default 0;
--该表是 学生表,是系统的主要业务表,数据170万左右。
开始,没仔细想,直接拿到生产上去执行了,然后发现一分多钟还没完,查看系统锁情况,二十张业务表貌似收到阻塞一直被锁。
赶紧cancel 了。
分析这个动作,add 字段应该很快,只是修改数据字典。然而,添加默认值,等同于 update 全表,也就是锁了全表。
将该语句分解为如下:
alter table T_STUDENT add student_auth NUMBER(1) ;
ALTER TABLE T_STUDENT MODIFY (student_auth default 0);
--批量提交
BEGIN
FOR i IN 1 .. 5 LOOP
UPDATE T_STUDENT SET STUDENT_AUTH = 0
WHERE STUDENT_AUTH IS NULL
AND ROWNUM <=100000;
COMMIT;
END LOOP;
END;
/
alter table T_STUDENT add student_auth NUMBER(1) default 0;
--该表是 学生表,是系统的主要业务表,数据170万左右。
开始,没仔细想,直接拿到生产上去执行了,然后发现一分多钟还没完,查看系统锁情况,二十张业务表貌似收到阻塞一直被锁。
赶紧cancel 了。
分析这个动作,add 字段应该很快,只是修改数据字典。然而,添加默认值,等同于 update 全表,也就是锁了全表。
将该语句分解为如下:
alter table T_STUDENT add student_auth NUMBER(1) ;
ALTER TABLE T_STUDENT MODIFY (student_auth default 0);
--批量提交
BEGIN
FOR i IN 1 .. 5 LOOP
UPDATE T_STUDENT SET STUDENT_AUTH = 0
WHERE STUDENT_AUTH IS NULL
AND ROWNUM <=100000;
COMMIT;
END LOOP;
END;
/
相关文章推荐
- (1) Karthik Ganesan的方法 - spec2006中精确的simulation points执行点
- C++常用术语及其英文翻译的含义和简单用途总结(五)
- C51 队列 方式 中断接收 查询发送
- 数据结构链表之循环双链表
- load ruuner几点事项
- Hadoop概论
- vim—基本命令1
- 【linux高级程序设计】(第十章)Linux异步信号处理机制
- Vmware虚拟硬盘合并多个分割文件
- HDU 0000 计算两点间的距离
- caffe python visualization程序解析
- xcode卸载插件
- window核心编程学习笔记 (一) 错误处理以及Unicode
- 截图生成图片并保存到相册
- linux命令1——基础
- Integer Inquiry
- Objective-C中打僵尸问题解析
- 汇率转换
- [leetcode] 213.House Robber II
- 整数排序