SQL Server内存问题疑难解答

时间:2010-07-29 07:14:09

标签: performance sql-server-2008

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

2 个答案:

答案 0 :(得分: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内存增加最有可能是缓存中的数据

答案 1 :(得分:1)

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

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

你可以从sql server perfmon内存管理器计数器找到这个,以确定sql server的哪个组件占用了大部分内存。

我遇到了这个和here are the details of how i solved the issue (link) - 内存上限(sp_configure'max server memory')的组合+确保查询计划缓存不会变得太大