gpt4 book ai didi

python - python 中名为 psycopg2 的游标的性能问题

转载 作者:行者123 更新时间:2023-11-29 13:44:49 26 4
gpt4 key购买 nike

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

最佳答案

我不是 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

此外,您的迭代大小越低,进行的网络调用就越多,这可能会降低您的性能,尤其是对于如此大的数据集和如此低的迭代大小。如果您需要分批处理 2000 个,您可以增加迭代器大小并在每个 fetchmany 中执行 2000 行,例如fetchmany(2000)。 fetchmany 在遍历所有当前获取的行之前不会进行网络调用。

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

关于python - python 中名为 psycopg2 的游标的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50205704/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com