【发布时间】:2014-05-15 06:25:59
【问题描述】:
朋友们,
我有订单表,每个表中至少有 1 亿条记录。我们有一个正在运行的作业,它调用一个存储过程,该过程每天删除至少 50K(MIN)和 200K(MAX)条记录。
我目前正在使用 SQL BULK COLLECT 从表中删除记录。目前删除 50K 需要 4 个多小时,速度非常慢。
在谷歌搜索后,找出CTAS方法,即创建表并保留我们想要的记录并删除现有的记录并重命名临时表。我不能这样做,因为这个选项不被接受,因为表格更重要。
您能否提出一些解决方案来提高其性能?
提前致谢!!
【问题讨论】:
-
被删除的 50K 记录是什么?选择删除记录的依据是什么?
-
“从
where
中删除”有什么问题?批量收集有什么用? 我正在使用 FORALL 来删除。正在根据时间戳删除记录。Rene- 一条一条删除记录会花费更多时间,尤其是表包含 1.8 亿条记录。它还会生成更多重做和撤消日志。如果我错了,请纠正我?4 小时删除 50K 行似乎太长了,不管行是如何删除的。您应该分析和监视您的代码,以准确了解时间花在哪里。是否存在错误的连接导致行选择永远需要?该表是否有几十个索引导致删除速度很慢?
标签: sql oracle stored-procedures oracle-sqldeveloper sql-tuning