代码之家  ›  专栏  ›  技术社区  ›  KOT

异步插入Oracle,有什么好处吗?

  •  1
  • KOT  · 技术社区  · 16 年前

    我正在使用odp.net将数据加载到Oracle中。我正在将插入扩展成一组,每个调用1000行。

    异步调用加载方法有什么性能上的好处吗?所以假设我想插入10000行,而不是同时进行10个调用,而是异步进行10个调用。

    我的数据库现在正在使用ASSM,但当然也使用了大量的自由职业者。数据库服务器也有几个核心。

    我最初的测试似乎指向性能的提高,但也许有一些我看不见的东西?潜在的死锁或争用问题?

    当然,在处理事务时会增加复杂性,这样做会增加我的负载。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Gary Myers    16 年前

    取决于瓶颈在哪里。

    如果瓶颈是CPU,并且您有多个CPU/核心,那么多个会话可以使用多个处理器,这将加快速度。

    如果瓶颈是网络(在“app”框和“db”框之间),那么优势就不那么明显了。您可以获得一些好处(例如会话“A”占用网络,而会话“B”使用磁盘/CPU,反之亦然)。

    磁盘介于两者之间。磁盘写入由dbwr进程和redo日志的lgwr在后台处理。同样,如果会话在不同的时间使用不同的资源,您将看到一些好处。

    您可能会遇到争用,特别是在“顺序”数字或日期上的索引上,在这些索引中,并行会话可能希望写入索引的相同位。

    您正在加载哪种数据卷?如果文件非常大,您可以通过传输文件(如csv)和通过外部表上载来获得好处。

        2
  •  1
  •   Vincent Malgrat    16 年前

    如果您同时插入(即通过几个会话),您应该会看到性能提高(达到限制)。您还没有描述如何异步插入,但我想您应该打开到数据库的多个连接。如果您有足够的自由撰稿人(或者您正在使用ASSM),那么瓶颈应该是磁盘写入速度。每个会话只提交一次(在工作负载结束时),不应该遇到争用问题。

    您已经看到了性能的提高,只有您能够知道它是否值得付出努力。