我们有一个Windows窗体应用程序,该应用程序的后端是SQL Server Express 2005/2008。我们的应用程序可以安装在Windows XP SP3 / Windows Vista / Windows 7上。
我们观察到SQL Server Express中存在大量内存泄漏。
通常,即使用户未使用该应用程序,也会运行两个进程:
检查文件可用性的轮询过程。 (如果文件不可用,则只触发一个查询以检查某些配置设置)
调度过程。 (此过程每分钟触发一次查询以检查任何计划任务)
我们观察到SQL Server(sqlsrvr.exe)的内存使用量不断增加。在大约一个小时内,内存使用量达到1GB并且永远不会下降。
我们还注意到,如果轮询过程的间隔增加,那么内存使用量会逐渐增加,但确实会增加。
SQL Server使用较高的内存会降低计算机性能以及计算机上运行的所有其他应用程序的性能。
在这种情况下,请提供控制SQL Server内存使用情况的建议。
PFB细节:
导致问题的软件:SQL Server 2005/2008 Express版本(命名实例)
可以模拟问题的操作系统:Windows XP SP3 / Windows Vista / Windows 7
此致
Abhineet
答案 0 :(得分:1)
SQL Server旨在获取系统上的所有内存并将其用于其内部缓存。您永远不应该在与SQL Server相同的计算机上运行任何其他内容。这不是泄漏,是预期和期望的行为。按设计。见Memory Manager Architecture
作为一种特殊情况,SQL Server Express版本将其内部缓冲池大小限制为1Gb。缓冲池不是SQL Server消耗的唯一内存。您可以通过指定max server memory
的值来进一步限制SQL Server缓冲池大小。