为PyODBC设置内存使用量是否可行?

问题描述 投票:0回答:1

我正在做一个连接到SQL Server的项目,以执行数千个存储程序并检索结果集。

我设置fast_executemany = True,并使用executemany来快速处理所有的Sprocs。但是在检索结果集时,我发现虽然前30-40个结果集的速度很快,但是检索其他的结果集就会逐渐变慢。

是不是因为前30-40个结果集被缓存在内存中,但是对于其他的结果集,游标对象要回到远程数据库中去取数据?如果是这样的话,我是否可以增量控制PyODBC的内存使用量,以便在总内存允许的情况下,所有的结果集都能被缓存?

python pyodbc
1个回答
0
投票

"是不是因为前30-40个集合被缓存在内存中,但对于其他的,游标对象要回到远程数据库中去取数据?"

是的,但它们是缓存在服务器上,而不是客户端。当你开始运行一个代表 "数千个存储程序 "的批处理时,你也开始生成结果集。这些结果集在服务器上被缓冲,直到它们被客户端检索。这个缓冲区的大小是有限的,如果缓冲区满了,那么控制权就会返回到客户端,批处理就会被暂停,直到客户端检索一些结果集来释放一些空间。

正如在

https:/support.microsoft.comen-cahelp8275sql-server-does-not-finish-execution-of-large-batch-sql-statement。

如果你正在执行一个具有多个结果集的大批次,SQL Server会填满该输出缓冲区,直到它达到一个内部限制,无法继续处理更多的结果集。这时,控制权就会返回到客户端。当客户端开始消耗结果集时,SQL Server又开始执行该批处理,因为现在输出缓冲区中有可用的内存。

© www.soinside.com 2019 - 2024. All rights reserved.