我正在使用ODP.NET将数据加载到Oracle中。我正在将插入插入到每个调用1000行的组中。
在异步调用load方法时是否有任何性能优势?所以说我要插入10000行,而不是同步进行10次调用,我异步进行10次调用。
我的数据库现在正在使用ASSM,但当然使用了大量的空闲列表。数据库服务器也有几个核心。
我的初步测试似乎表明性能有所提升,但也许有些东西我看不到?潜在的僵局或争用问题?
当然,处理事务会增加复杂性,这样就可以通过这种方式加载。
答案 0 :(得分:2)
取决于瓶颈在哪里。
如果瓶颈是CPU并且你有多个CPU /核心,那么多个会话可以使用多个处理器来加快速度。
如果瓶颈是网络(在'app'框和'db'框之间),那么优势就不那么明显了。您可以获得一些好处(例如,会话'a'占用网络,而会话'b'使用磁盘/ cpu,反之亦然)。
磁盘介于两者之间。磁盘写入由DBWR进程在后台处理,LGWR用于重做日志。同样,如果会话在不同时间使用不同的资源,您会看到一些好处。
您可能会遇到争用,特别是对于“顺序”数字或日期的索引,并行会话可能希望写入索引的同一位。
您要加载哪种数据量?如果它非常大,您可以通过传输文件(例如CSV)并通过外部表格上传来获益。
答案 1 :(得分:1)
如果同时插入(即通过多个会话),您应该会看到性能提升(最多限制)。您还没有描述过如何异步插入,但我想您打开了多个与数据库的连接。如果您有足够的空闲列表(或者您正在使用ASSM),则瓶颈应该是磁盘写入速度。每个会话只提交一次(在工作负载结束时),您不应该遇到争用问题。
您已经看到性能提升,只有您可以判断它是否值得付出努力。