【问题标题】:Oracle DB multiple simultaneous commits are too slowOracle DB 多个同时提交太慢了
【发布时间】:2014-07-05 10:21:40
【问题描述】:

我正在将多批数据 (~40 MB) 并行加载到 Oracle DB。我注意到在这种情况下并行 Oracle 提交到 DB 的速度非常慢。但是单次提交要快得多。 看起来这个问题与 Oracle 重做日志文件或日志文件同步有关。 你能帮忙解决这个问题吗?

【问题讨论】:

  • “并行 Oracle 提交”对您意味着什么?您确定问题不只是您的并行处理没有按照您想要的方式扩展吗?是什么让你相信提交是让你慢下来的操作?您是否有一些 AWR/Statspack 报告让您相信这一点?你是说每个线程加载 40 MB 的一批数据,然后发出一个提交?你有多少并发线程,你加载了多少数据,你提交了多少次?
  • 我有 5 个 Java 进程。它们中的每一个都执行数据加载,最后将操作加载到事务中。每个进程有一个事务。我正在调试执行数据加载的 java 类,并且在提交方法调用上花费了很多时间(在这种情况下约为 5 分钟)
  • 数据库正在等待什么等待事件?每个 Java 进程都发出一个提交吗?所以你描述的情况是,如果总共有 1 次提交,事情会很快,但是当你现在总共只有 5 次提交时,你的过程很慢?
  • 是的。每个 Java 进程发出一个提交。是的。对我来说,一个进程中的 100MB 单次提交比每 5 个进程提交 20MB 快。
  • 数据库在等待什么?

标签: database oracle commit redo


【解决方案1】:

如果您有 日志文件切换(检查点不完整) 事件,这意味着您将重做日志的大小调整为小。 它们的大小是多少? 你能用最大的尺寸添加更多吗(很容易做到)?

【讨论】:

  • 谢谢。我增加了重做日志的大小。现在我每 400M 有 6 组重做日志。因此,我的会话不会等待 日志文件切换(检查点不完整) 事件,但仍然等待 空闲缓冲区等待 事件(约 2 分钟)。我认为这是一个问题。不是吗?
  • 甚至超过5分钟...那么有什么办法可以增加缓冲区缓存大小吗?
  • 我不确定是否完全理解您的问题,但在我看来您有一个 I/O pb。这可能是瓶颈。所以在这种情况下并行化可能不是一个好的解决方案。加快速度的解决方案可能是在 nologging 模式下批处理。
猜你喜欢
  • 1970-01-01
  • 2020-07-15
  • 2018-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-08
  • 2020-08-19
  • 2016-02-14
相关资源
最近更新 更多