Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中名为cursor的psycopg2的性能问题_Python_Postgresql_Database Migration_Data Migration - Fatal编程技术网

python中名为cursor的psycopg2的性能问题

python中名为cursor的psycopg2的性能问题,python,postgresql,database-migration,data-migration,Python,Postgresql,Database Migration,Data Migration,在做了一些研究之后,我发现python中使用psycopg2的无名游标将尝试将所有结果集加载到我的计算机内存中,这对我来说是一个大问题,因为我查询的Postgresql表的大小约为1.4 TB。我发现给我的游标命名将创建一个服务器端游标,该游标将只加载我将要求它加载的行数,使用“fetchmany”,但执行查询的速度明显变慢。有没有办法加快服务器端游标的速度? *我尝试只加载大约2000行,因为这大约是我需要批处理的大小。如果这能解决您的性能问题,我不是100%肯定,但您不需要将cursor.f

在做了一些研究之后,我发现python中使用psycopg2的无名游标将尝试将所有结果集加载到我的计算机内存中,这对我来说是一个大问题,因为我查询的Postgresql表的大小约为1.4 TB。我发现给我的游标命名将创建一个服务器端游标,该游标将只加载我将要求它加载的行数,使用“fetchmany”,但执行查询的速度明显变慢。有没有办法加快服务器端游标的速度?
*我尝试只加载大约2000行,因为这大约是我需要批处理的大小。

如果这能解决您的性能问题,我不是100%肯定,但您不需要将
cursor.fetchmany()
与服务器端光标一起使用。您只需在命名游标上迭代即可

with psycopg2.connect(db_uri_string) as conn:
    cursor = conn.cursor(name='cursor_name')
    cursor.itersize = 20000

    query = "SELECT * FROM ..."
    cursor.execute(query)

    for row in cursor:
        # process row 
此外,itersize越低,进行的网络调用越多,这可能会降低性能,尤其是在数据集如此大、itersize如此低的情况下。如果您需要以2000行为一批进行工作,您可以增加itersize,并对每个fetchmany执行2000行,例如
fetchmany(2000)
。fetchmany在遍历当前获取的所有行之前不会进行网络调用

如果itersize为20000,并且您调用
fetchmany(2000)
,则需要10
fetchmany(2000)
才能进行网络调用