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



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

我设置fast_executemany = True并使用executemany快速浏览所有Sprocs。但是在检索结果集时,我发现虽然前 30-40 个结果集的速度很快,但检索其余结果集的速度会越来越慢。

是因为前 30-40 个集合缓存在内存中,但对于其余集,游标对象将返回到远程数据库以获取数据?如果是这种情况,我是否可以增加/控制 PyODBC 的内存使用量,以便在总 RAM 允许的情况下可以缓存所有结果集?

"是因为前 30-40 个集合缓存在内存中,但对于其余的,游标对象将返回到远程数据库以获取数据?">

是的,但它们缓存在服务器上,而不是客户端上。当您开始运行表示"数千个存储过程"的批处理时,您也开始生成结果集。这些结果集在服务器上缓冲,直到客户端检索它们为止。该缓冲区大小是有限的,如果它已满,则控制权将返回给客户端,批处理将挂起,直到客户端检索一些结果集以释放一些空间。

如中所述

https://support.microsoft.com/en-ca/help/827575/sql-server-does-not-finish-execution-of-a-large-batch-of-sql-statement

如果要执行具有多个结果集的大型批处理,SQL Server 将填充该输出缓冲区,直到达到内部限制,并且无法继续处理更多结果集。此时,控制权将返回给客户端。当客户端开始使用结果集时,SQL Server 将再次开始执行批处理,因为输出缓冲区中现在有可用内存。

相关内容

最新更新