【表优化集群因子】求助:CTAS在线重建表

本帖最后由 kevin.zhang 于 2011-1-11 15:09 编辑

面临一个问题:
生产库。发现表A集群因子很大,100W行的数据集群因子达到了50W。需要CTAS重建表。可是不允许停止应用,只需允许在线重建。

我是这样设计的,对于目标表A:
create table a_tmp as select * from a;
truncate table a;
insert into a select * from a_tmp order by c1,c2,c3;
commit;

出于业务逻辑正确性的考虑,应该是:
Lock table a in exclusive mode;
create table a_tmp as select * from a;
truncate table a;
insert into a select * from a_tmp order by c1,c2,c3;
commit;
Unlock table a;

但是现在问题是,没发现有什么命令可以很好的锁住一个表。譬如lock命令,在DDL后自动就释放了。而且lock命令也不够强, 虽然可以阻塞其它DML,但是这些DML也会使得truncate失败

有什么办法可以解决这个问题吗?还是说我对于事务逻辑性的考虑多虑了?




标签: 暂无标签
kevin.zhang

写了 32 篇文章,拥有财富 308,被 10 人关注

转播转播 分享分享 分享淘帖
回复

使用道具

P6 | 发表于 2011-1-12 11:07:32
LOCK以后,不要使用这个session了。
使用别的session进行操作。
回复

使用道具

您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈