Oracle数据库表删除最佳做法

问题描述 投票:0回答:1

环境:Oracle 12C

得到一个约有10列的表,其中很少有Clob和date列。这是ETL流程非常繁忙的表,如下所述-

平面文件首先加载到表中,然后进行更新和处理。插入和更新分批进行。数百万条记录已插入并更新。

还有一个删除过程,用于根据表中的日期字段删除旧数据。删除过程作为pl / sql过程运行,并在循环中从表中删除,仅根据日期字段读取前n条记录。

我不希望删除过程干扰常规的插入/更新。对删除进行编码以使其对常规插入/更新过程的影响最小的最佳实践是什么?

我还可以对表进行分区和并行删除,因为每个分区都使用自己的回滚段,但是我正在寻找一种更简单的方法来调整删除过程。关于使用特殊回滚段或其他调优技巧的任何建议?

database oracle oracle12c database-performance
1个回答
0
投票

您应该寻找的第一件事是将各种ETL流程解耦,这样就不必将所有这些流程一起或以特定的顺序进行。从而,消除了INSERTS / UPDATESDELETES的依赖性。当您可以在ETL中的单个MERGE块中管理插入/更新时,您可以稍后通过简单地标记要稍后删除的行来进行删除,从而执行soft delete。您可以将其作为表格列中的标志来进行。并在您的应用程序和查询中使用相同的内容将其过滤掉。

通过稍后进行删除,您的ETL的关键路径应该最小化。根据日期范围对数据进行分区绝对可以帮助您维护数据,并在日期驱动下提高交易效率。另外,查找任何row-by-row,从而查找slow-by-slow事务,然后进行批量处理。尽量避免在SQL和PL / SQL之间使用上下文切换

如果将表划分为日期范围,则可以查看DROP/TRUNCATE分区,该分区将以DDL语句的形式丢弃存储在该分区中的行。这无法回滚。它执行迅速,并且使用很少的系统资源(撤消和重做)。

© www.soinside.com 2019 - 2024. All rights reserved.