随着时间的推移,通过cx_Oracle批量写入数据库的速度逐渐变慢

时间:2019-06-20 04:39:20

标签: python-3.x database oracle12c cx-oracle

我正在通过Python 3.6中的cx_Oracle库将大量行(约3亿行)写入数据库表。读取多个方案的输入,每个方案都会生成数百万行以写入数据库表。使用下面的WriteToDatabase函数一次可批量写入约500,000行。我发现较大的批次比较小的批次提供了更高的性能。请注意该表在此过程之前被截断。作为参考,这是每批写入速度的样子:Output time

我认为问题可能是由于在func2返回时将不必要的变量存储在内存中而被清除的。因此,我手动删除了不必要的变量,并称为垃圾收集器(gc.collect)。尽管这可以改善性能,但仍然存在性能随时间下降的潜在问题。

def func1(args1):  
    for xx in range(0,NumberofScenarios):  
        def func2(args2,xx):  
            #Perform analysis using xx  
            def func3(args3):  
                del unnecessary_variables   
                gc.collect()  
                WriteToDatabase(curs, ListofTuples):  
            func3(args3)  
        func2(args2,xx) 



def WriteToDatabase(curs, ListofTuples):       
    curs.executemany("""  
        insert /*+ APPEND_VALUES NOLOGGING*/ into table1  
        (col1, col2, col3, col4, col5)  
        values (:1,:2,:3,:4,:5)  
    """, ListofTuples  
    )  

我不明白为什么从函数(func2)中返回和调用会影响写入数据库的性能。

关于导致此问题的原因和解决方法的任何想法?

0 个答案:

没有答案