【发布时间】:2015-10-05 14:27:35
【问题描述】:
我编写了一个程序来提取存储在数据库中的 PDF 文件,并将它们存储到文件系统中。这将针对包含大约 200 万条记录的表执行。该程序在每个查询中抓取 1000 个文档块中的数据(使用小型 c# 应用程序并行执行)。
我面临的问题是 SQL Server 的内存使用情况。我最终得到一个System.OutOfMemory 异常并需要终止程序(我不再有异常详细信息),并且分配的内存似乎被缓冲页面的数量所使用。运行程序 5 分钟后,我执行了 194'443 个页面,占用了 1519MB 内存。
我已经尝试使用DBCC DROPCLEANBUFFERS 并且这可行,但这不是一个选项,因为我将在客户站点上运行此程序,并且不想影响任何其他数据库。
有没有人知道一种方法可以阻止 SQL Server 将页面存储在内存中,或者在不影响该实例中的任何其他数据库的情况下刷新已使用的特定内存部分?
我正在使用 C# 应用程序连接到数据库。我的数据提供程序使用 PetaPoco 工作,它使用 System.Data.SqlClient 类连接到 SQL Server 数据库。
【问题讨论】:
-
发布代码。在您的描述中没有可以用来帮助您的信息。你如何连接到数据库?你在使用
USING语句吗?是否有待处理的连接?查看here 以获取有关如何提问的提示。 -
我已经更新了我的问题。谢谢。
-
您是否正确配置了最大内存?您是否在同一台服务器上运行其他应用程序? SQL Server 不应该只是内存不足
标签: c# sql-server memory buffer