【问题标题】:Is there a way to estimate the write bandwidth from java to an Oracle有没有办法估计从 java 到 Oracle 的写入带宽
【发布时间】:2010-12-02 01:03:08
【问题描述】:

我们有大量数据,想知道将其写入 Oracle 的速度有多快。 有没有办法估计从 java 到 Oracle DB 的写入带宽?如果速度更快,我们可以使用任何方法(不一定是 JDBC)。例如,了解 X 磁盘速度、Y 处理器会很有用,然后您可以写入 Z 字节/秒。有没有办法估计这样的数据速率?

谢谢!

【问题讨论】:

  • 我们能查出你想要做什么吗?例如,如果您要加载表,SQL*LOADER 会更快,因为它可以直接在数据库上运行。你能更好地定义问题吗?
  • 是的 - 我们有 100 MB 的由 java 进程计算的数字数据;试图大致找出写入 Oracle 需要多长时间,比如在普通的现代服务器(可能是 Windows)上。如果没有公式是可能的,那么任何经验法则都会很有趣 - 谢谢!
  • 这很大程度上取决于表/索引的结构。您会将这些加载到新表中还是更新现有数据?它只是一组行还是您需要加载到几个相互关联的表中。等等。
  • 我们的目标结构(尚未明确定义,不确定是否尝试将所有这些都写入 Oracle!)将类似于 OLAP,因此可能是一个具有多个链接维度表的数据表。对于每个数据结果,我希望向数据表插入一次,并可能向维度表插入新项目[抱歉,这有点抽象:-)]。
  • 能不能把你的生成和加载重叠,还是要等到所有数据都生成后再加载?

标签: java oracle


【解决方案1】:

我认为没有任何标准公式。除其他外,它还取决于您的架构(例如,您是否在表上有索引)、文件系统、您拥有多少磁盘、您使用的 RAID 级别、表、索引、日志等如何分布在那些磁盘...

试试看可能是唯一的方法。

考虑到这一切,如果有一种估算方法,我也想知道!

【讨论】:

  • +1 您正在寻找的神奇公式不存在。获得一个像样的想法的唯一方法是进行一些适当的测试。
  • 我将不得不同意 Paul 和 Qwerky 的观点。但是,您可以分解任务(如果可能)。你能先把结果写到磁盘上吗(这给了生成 w/io 的时间)然后将结果加载到数据库中(oracle 时间)。现在,一旦您拥有一致的数据集,您就可以对 oracle 的内容进行 tweek 并在不同的配置上对其进行测量。
  • 当然可以像那样拆分-因此写入磁盘文件然后将其导入Oracle会比直接写入更快吗?谢谢!
  • 我认为@Jim 并不是说​​它更快 - 只是从磁盘文件开始意味着您可以测试各种加载选项,而不会因为生成时间而造成混淆。
【解决方案2】:

如果您有网络带宽、处理器速度和磁盘写入带宽,您需要知道 Oracle 会增加多少数据包的大小以及在将数据写入磁盘时会增加多少数据。 (即开销是多少)这完全取决于您的数据结构,但对于给定的数据结构,它将是相同的。如果没有更多信息,我猜它是 2-3 倍。

我建议总时间是组合延迟的总和。 (除非您知道不同,并发是可能的,但不太可能;)您可以推测该过程的每个部分需要多长时间,并且可以精确到三倍以内。这不会以任何方式取代测试,但如果您的测试时间明显不同,则值得检查原因。

假设您有大量事务(不尝试单独提交每条记录),公式可能如下所示

网络延迟 - 100% 开销的 1 Gb 链接上的 100 MB 需要 2 秒。

处理器延迟 - 100 MB,200% 的开销在可以移动 300 MB/s 的处理器上需要 1 秒

磁盘延迟 - 100 MB,200% 的磁盘开销可以维持 60 MB/s 需要 5 秒。

注意:根据您的缓存方式,您的数据写入/写回磁盘可能几乎完全被缓存并稍后写出。

这会导致 3 到 8 秒的猜测。

但是,您仍然需要测试您的特定系统以了解这需要多长时间。

【讨论】:

  • 不过,这不是问题所在。考虑到这些情况,OP 正在询问是否有写入带宽的公式。不问如何计算网络带宽等。
猜你喜欢
  • 1970-01-01
  • 2011-07-01
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
相关资源
最近更新 更多