性能调整 - 插入

时间:2016-04-21 20:52:43

标签: database oracle performance sql-tuning query-tuning

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

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

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

  1. 插入没问题,因为在同一个表上我们从另一个工作表中插入了50万个工作正常工作。插入不到一分钟就完成了。
  2. 从tablex插入表()select(); 它为20万条记录花费了20分钟 Tablex-在同一个shell脚本中创建,加载,70直接更新。

    单独选择和使用插入脚本检查解释计划成本是否相同。

    从tabley插入表()select(); 上述声明的执行时间不到一秒钟。

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

1 个答案:

答案 0 :(得分:0)

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