暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 删除引用的分区表需要时间

ASKTOM 2020-11-24
341

问题描述

嗨,康纳,克里斯,

我已经引用了分区表,如下所示
它是ORDER_DATE列上的每日范围分区。

CREATE TABLE ORDERS
(
  ORDER_ID                    NUMBER(11),
  PART_DATE              DATE          DEFAULT trunc(sysdate),
  ....
  150 columns
  ....
)
PARTITION by range (PART_DATE) (
    partition ORDERS_P_01_JAN_2018 values less than (to_date('02-JAN-2018','DD-MON-YYYY')),
    partition ORDERS_P_02_JAN_2018 values less than (to_date('03-JAN-2018','DD-MON-YYYY')),
    partition ORDERS_P_03_JAN_2018 values less than (to_date('04-JAN-2018','DD-MON-YYYY')),
    partition ORDERS_P_04_JAN_2018 values less than (to_date('05-JAN-2018','DD-MON-YYYY')),
    partition ORDERS_P_MAXVALUE  values less than (maxvalue)
);

CREATE TABLE ORDERS_DETAILS
(
  ORDER_ID               NUMBER(11)         NOT NULL,
  ....
  70 columns
  ....
  CONSTRAINT FK_ORDER_ID 
  FOREIGN KEY (ORDER_ID) 
  REFERENCES ORDERS (ORDER_ID)

)
PARTITION BY REFERENCE (FK_ORDER_ID);



这里的问题是-从子 “ORDER_DETAILS” 和父 “ORDERS” 中删除记录需要花费大量时间。
每个表的每日分区记录计数是大约800k在 “ORDERS” 和270万在 “ORDER_DETAILS”,这些表保存2个月的数据和休息被清除在每日的基础上 (使用本机删除语句)。

早些时候,我们使用每次迭代的50k记录删除这些记录,然后提交。
然后,我们尝试使用5k的极限计数器,但是完成当天所有记录的清除也需要相同的时间。

下一个选项我们计划截断分区而不是delete语句。
但是在这样做之前,我想寻求您的帮助,以便我可以在删除时间上进行更多检查。

您能否建议一些可以在我们结束时检查的内容。

专家解答

删除数百万行将需要 “一段时间”

截断一个表 (分区) 是 “瞬间”

看起来您每天都有分区,并且希望每天删除数据。所以问题是:

为什么要使用delete而不是truncate partition?

分区的一大好处是,它可以通过drop/truncate分区快速删除旧数据。

只需使用truncate-您需要一个非常有力的理由来继续尝试优化删除。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论