目前,活动数据库继续使用更多内存,直到达到约5.8GB,然后开始引发频繁的连接超时错误。我知道SQL Server旨在尽可能多地使用内存,但它不应该抛出这些错误。特别是,似乎运行的东西导致内存非常迅速地增长约2GB。 DB有很多索引和存储过程,如何跟踪哪一个负责?
答案 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文件?
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')的组合+确保查询计划缓存不会变得太大