如何调整数据库上的删除操作 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';
只要您想删除数据,只需刷新即可。你也可以在上面使用索引。
干杯!!
我正在使用 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';
只要您想删除数据,只需刷新即可。你也可以在上面使用索引。
干杯!!