python中psycopg2命名游标的性能问题

2024-09-28 17:30:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 内存postgresql计算机服务器端名字tb速度psycopg2
1条回答
网友
1楼 · 发布于 2024-09-28 17:30:31

我不是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),则需要10fetchmany(2000)来进行网络调用。在

相关问题 更多 >