SQL Buffer页面迅速增加SQL Server内存使用量

时间:2015-10-05 14:27:35

标签: c# sql-server memory buffer

我编写了一个程序来提取存储在数据库中的PDF文件,并将它们存储到文件系统中。这将针对包含大约200万条记录的表执行。该程序以每个查询1000个文档的块为单位抓取数据(使用小型c#应用程序并行执行)。

我面临的问题是SQL Server的内存使用情况。我最终得到一个System.OutOfMemory异常并需要终止程序(我没有异常细节),并且分配的内存似乎被缓冲页面的数量使用。运行程序5分钟后,我执行了194'443页,占用了1519MB内存。

我已尝试使用DBCC DROPCLEANBUFFERS,但这不起作用,因为我将在客户网站上运行此程序,并且不希望影响任何其他数据库。

是否有人知道一种方法可以阻止SQL Server将页面存储在内存中,或者在不影响该实例中任何其他数据库的情况下刷新所使用的内存部分?

我使用C#应用程序连接到数据库。我的数据提供程序使用PetaPoco,它使用System.Data.SqlClient类连接到SQL Server数据库。

1 个答案:

答案 0 :(得分:0)

您无法有选择地刷新SQL Server中的部分内存。而不是每个查询1000个文档,从较小的东西开始,可能是100,然后测试你的方式到合理的"州。导致检索1000个文档的单个READ意味着SQL Server必须缓存所有这些以便为查询提供服务,并且在查询完成之前无法释放任何文档。这可能需要很长时间,具体取决于您在该交易中的其他内容,IO容量等...

除了记忆之外,当您通过1000个文档工作时,您可能会阻止其他查询,这可能会让您的客户对随机DBCC DROPCLEANBUFFERS同样不满意