问题描述
嗨,康纳,克里斯,
我已经引用了分区表,如下所示
它是ORDER_DATE列上的每日范围分区。
这里的问题是-从子 “ORDER_DETAILS” 和父 “ORDERS” 中删除记录需要花费大量时间。
每个表的每日分区记录计数是大约800k在 “ORDERS” 和270万在 “ORDER_DETAILS”,这些表保存2个月的数据和休息被清除在每日的基础上 (使用本机删除语句)。
早些时候,我们使用每次迭代的50k记录删除这些记录,然后提交。
然后,我们尝试使用5k的极限计数器,但是完成当天所有记录的清除也需要相同的时间。
下一个选项我们计划截断分区而不是delete语句。
但是在这样做之前,我想寻求您的帮助,以便我可以在删除时间上进行更多检查。
您能否建议一些可以在我们结束时检查的内容。
我已经引用了分区表,如下所示
它是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-您需要一个非常有力的理由来继续尝试优化删除。
截断一个表 (分区) 是 “瞬间”
看起来您每天都有分区,并且希望每天删除数据。所以问题是:
为什么要使用delete而不是truncate partition?
分区的一大好处是,它可以通过drop/truncate分区快速删除旧数据。
只需使用truncate-您需要一个非常有力的理由来继续尝试优化删除。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




