-3

我有一个 UNIX 脚本 在这个脚本中,我们使用 SQL Loader 创建表、索引并从文件加载日期到该表。并在此表上进行近 70 次直接更新(不用于全部或批量收集)。

最后,我们将这个新表数据插入到另一个表中。它每天处理 500 000 条记录。所有这些更新都非常快。

在将此数据插入另一个表期间需要 20 分钟。如何改进?

  1. 插入没有问题,因为在同一张表上,我们正在从另一个工作正常的表中插入 500 000 个校长。插入不到一分钟。

插入表格()从tablex中选择();500 000 条 Tablex 记录需要 20 分钟——在同一个 shell 脚本中创建、加载、70 条直接更新。

检查了单独选择和插入脚本的解释计划成本都相同。

插入表格()从表格中选择();上述语句执行不到一秒钟。

  • 我使用了并行提示。成本降低。而且cpu利用率为零。
  • 我应该再创建一个表 tablez 然后将数据从 tablez 加载到我的最终表吗?
  • 是否需要统计数据收集?这是每日运行程序。
4

1 回答 1

0

当我们使用 SQL Loader 进行直接路径插入时,记录会插入到 HighWaterMark 之上。加载完成并将 HighWaterMark 向上移动后,原始/旧 HighWaterMark 位置下方可能会有很多空块。如果您的 SELECT 要进行全表扫描,它也会读取所有这些空块。检查您的表在一段时间内是否积累了大量的空块。您可以为此使用 Segment Advisor。根据顾问建议,缩小表并释放未使用的空间。这可以加快执行速度。希望这可以帮助。

于 2016-04-22T11:47:01.777 回答