2010-07-29 108 views
1

当前,活动数据库继续使用更多内存,直到达到大约5.8GB,然后开始引发频繁的连接超时错误。我知道SQL Server被设计为尽可能多地使用内存,但它不应该抛出这些错误。特别是,似乎运行的东西会导致内存非常迅速地增长大约2GB。数据库有许多索引和存储过程,我如何追踪哪一个负责?疑难解答SQL Server内存问题

回答

1

SQL服务器旨在增长和吃掉系统中的所有内存。因此它会这样做,为查询计划缓存和表和索引分配内存。它应该在系统需要时释放内存,但是我的经验是系统将使用分页系统开始使用更多的内存,并且在sql服务器开始释放它所拥有的内存之前,事情会变慢很多。

如果你的数据不像它看起来吃的那么大,并且你没有太多的连接,那么它必须为它使用的许多缓存分配内存。

你可以从sql server perfmon内存管理器计数器找到这个指针,指出sql server的哪个组件正在吃掉大部分内存。

我遇到仅此here are the details of how i solved the issue (link) - 上部内存限制(sp_configure最大服务器内存“)+确保查询计划缓存不会增长太大

1

它不会记忆如此:SQL Server旨在使用它

你可能有一个长期运行的事务,否则如上传的东西,那就是阻止其他进程。

运行这个,看看发生了什么事情

SELECT 
    p1.SPID AS blockedSPID, p2.SPID AS blockingSPID, ... 
FROM 
    master..sysprocesses p1 
    JOIN 
    master..sysprocesses p2 ON p1.blocked = p2.spid 

当你说“由2GB的增长”。你是我的MDF或LDF文件?

  • LDF =长期运行或打开事务
  • =正在生成/上传大量数据的MDF(我已经看到了流氓审计触发器)

的2GB存储器增加将数据在缓存中最有可能

+0

感谢您的回答组合,我会尽力只要我有机会,它就会出来。但为了快速响应你的问题,我实际上意味着内存增加了2GB(我已经更新了操作系统) – LaserJesus 2010-07-29 09:04:12

+0

数据库只是再次抛出错误:“超时过期。操作或服务器完成之前已超时没有回应“。我试着运行你提供的查询,但它没有返回任何行。 – LaserJesus 2010-07-30 02:59:53