暂无图片
分享
周佳奇奇
2020-06-19
在线重定义 DBMS_REDEFINITION.abort_redef_table一直执行不结束

3千万的表使用在线重定义做表分区,在 DBMS_REDEFINITION.START_REDEF_TABLE这一步花了4个小时还没结束,所以手动终止了重定义。最后执行DBMS_REDEFINITION.abort_redef_table也一直卡着不结束,等待时间为TM锁,看正在执行的sql也就只有这一条,请帮忙分析一下是什么原因?以下是oratop监控情况

DB CPU 4068044 70
log file sync 2.530E+08 1314538 13.1 23 Commit
enq: TX - row lock contention 84362 233605 1712.1 4 Application
reliable message 1.835E+08 115821 0.8 2 Other
RMAN backup & recovery I/O 5751276 79807 9.9 1 System I/O

ID SID SPID USERNAME PROGRAM SRV SERVICE PGA SQLID/BLOCKER OPN E/T STA STE WAIT_CLASS EVENT/*LATCH W/T
2 1771 97090 SYS plsqldev. DED vacc 3.3M 2:689 PL/ 299s ACT WAI Applicatio enq: TM - contention 2.7s

收藏
分享
5条回答
默认
最新
文成

根据cons_use_rowid进行的嘛? 应该没有那么慢

暂无图片 评论
暂无图片 有用 0
周佳奇奇

根据主键

暂无图片 评论
暂无图片 有用 0
杨卓

数据初始化的步骤是,先insert apend数据到临时表,而后对索引进行重建。 由于oracle自动创建索引,收到并行参数影响,并行度1,导致本次数据初始化,数据Insert apend 3小时,插入500G数据至中间表207G,但是等待索引创建使用了2小时,最终导致本次数据初始化使用了5个小时!!!
优化建议:确保临时表,在第一次初始化过程中,不要创建任何索引,包括本次删除了主键约束,但是没有级联删除索引导致本次非常缓慢。
上述信息,应该能解答你第一次同步数据很慢的问题,停止在线重定义,提供的信息有点少。 建议1.查询当前session id,2.执行abort停止重定义命令;3.观察 之前查询的session id执行的sql_id,event,阻塞会话,阻塞会话执行什么信息!;4.根据理解abort应该会涉及删除中间表或者对象信息。

暂无图片 评论
暂无图片 有用 0
周佳奇奇

谢谢各位了,问题已经解决了,由于研发更新代码之后,业务逻辑导致了这个表一直被锁,所以在线重定义一直卡着

暂无图片 评论
暂无图片 有用 0
周佳奇奇
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏