如何调整数据库上的删除操作 Link

How to Tune Delete operation over the DB Link

我正在使用 Oracle 12c 数据库,我正在 db_link 上执行源数据库到目标数据库之间的删除操作。删除操作耗费大量时间,我必须对其进行调整。

我已经尝试过在目标上驾驶网站提示,但执行起来仍然需要很多时间。源 table 有大约 120 万条记录,目标 table 有大约 3800 万条记录。 Report_id 和 Id 列分别是 tables 的 PK。

Delete from PRIMARY_TABLE WHERE REPORT_ID IN (SELECT ID FROM PROCESS_DATA@PVA_TO_SRC WHERE TYPE='E');

如果这是批处理 job/one 下班,那么我建议您第一步将 120 万行 table 带到与目标相同的数据库中。

例如: 创建 TABLE TEMP_DELETE 作为 SELECT ID 来自 PROCESS_DATA@PVA_TO_SRC 其中类型='E'

随后收集有关新创建的 table 的统计信息。之后删除应该会更好。

另外一个3800万行table一定是在一个字段上分区了?。如果有任何方法可以将目标 table 和 link 中的分区键与 TEMP_DELETE 中的记录一起使用,那么删除效果会更好。

此外,如果您获得了 3800 万的索引 table。删除那些索引,执行删除,然后重新创建索引

创建一个 materialized view
SELECT ID FROM PROCESS_DATA@PVA_TO_SRC WHERE TYPE='E';

只要您想删除数据,只需刷新即可。你也可以在上面使用索引。

干杯!!