【问题标题】:Oracle PL/SQL Table memory usage vs temporary tablesOracle PL/SQL 表内存使用与临时表
【发布时间】:2013-10-16 19:33:27
【问题描述】:

我正在逐步从 Web 服务中提取记录。我需要将本地表中未由 Web 服务返回的任何记录的状态设置为“已删除”;

我原本打算将完整的记录 ID 列表存储在 PL/SQL 表中,然后基于该表执行单个 UPDATE 语句。

我现在估计记录集的内存使用量约为 615MB。 PL/SQL 表的内存占用与使用全局临时表相比如何?它是否会使用 Oracle 内存的不同部分,例如 PGA 与 SGA?

性能不是主要问题,因为这项夜间作业已经在生产环境中以可接受的时间运行。我不相信添加“已删除”状态片段会增加运行持续时间以影响用户。

【问题讨论】:

  • “性能不是主要问题,因为这是一项夜间工作。” - 这会在未来咬你(当人们早上开始工作时你的夜间工作还没有完成)。
  • 我可能应该说我知道这项工作需要多长时间,因为它已经在生产环境中运行。 DELETED 状态位是新的,但我认为它不会增加运行持续时间以影响用户。
  • 那么累积这些记录而不是更新它们的原因是什么?他们到达的速度是多少?
  • 我将使用 MINUS 查询将状态设置为“已删除”。我不能随着它们的出现而增量地这样做,因为我还没有完整的活动记录集。将任何记录错误地设置为“已删除”,即使只是在工作期间也是如此,在此应用程序中是不可接受的。

标签: oracle memory data-structures plsql


【解决方案1】:

全局临时表不会以这种方式使用内存。它将值存储在只有您的会话可以访问的临时段中,并且在不再需要时将其删除。

您是否考虑过如果您的会话断开连接会发生什么?在任何一种方法中,您都会丢失您积累的值。您可能只想使用常规表格。

【讨论】:

  • 这是从 DBMS_SCHEDULER 作业运行的。是否有可能以这种方式断开连接?
  • 无论如何我都会计划恢复,无论是通过重新轮询数据源还是存储检索到的数据。数据库本身可能崩溃或关闭。
  • 和你在一起。幸运的是,脚本是无状态的。不管是中途中断,还是某些记录失败,或者 DELETED 位没有运行,下一次都会恢复。
猜你喜欢
  • 2012-02-13
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 2011-01-04
  • 2011-03-28
相关资源
最近更新 更多