![SQL Server 2012 内存使用量稳步增长](https://linux22.com/image/797021/SQL%20Server%202012%20%E5%86%85%E5%AD%98%E4%BD%BF%E7%94%A8%E9%87%8F%E7%A8%B3%E6%AD%A5%E5%A2%9E%E9%95%BF.png)
我非常担心运行数据库的 SQL Server 2012 Express 实例:SQL Server 进程内存使用量稳步增长(仅工作 2 天后就达到 1.5GB)。数据库由七个表组成,每个表都有一个 bigint 主键(Identity)和至少一个非唯一索引,其中包含一些列,用于处理大多数传入查询。外部应用程序通过 Microsoft OLE DB 调用一些存储过程,每个存储过程使用中间临时表和/或表变量进行一些计算,最后执行 upsert(UPDATE....IF @@ROWCOUNT=0 INSERT.....
)- 我从未明确删除这些临时表:这些调用的频率约为每 5 秒 100 次(我看到外部应用程序使用的 DLL 打开与 SQL Server 的连接,执行调用,然后关闭每次调用的连接)。数据库文件仅在一个文件组中组织,恢复类型设置为简单。诊断问题的一些问题:
- 记忆力稳步增长正常吗?
- 我在数据库设计中是否犯了可能导致此行为的错误?(没有明确的临时表删除、文件组组织等)
- SQL Server 是否可以管理这样的存储过程调用率(每 5 秒 100 次调用,即每 5 秒 100 次 upsert,超出中间计算)?
- 连续的“打开连接/执行 sp 调用/关闭连接”模式会干扰 SQL Server 吗?
- 是否可以诊断出导致这种内存使用的原因?也许是等待请求的队列?(我运行了 sp_who2,但没有看到来自外部应用程序的大量孤立连接)
- 如果我限制 SQL Server 可以使用的内存量,我迟早会遇到麻烦吗?
答案1
有点/视情况而定。SQL Server 通常会占用尽可能多的内存(通常比它实际使用的内存多得多)。不要担心,除非您确实因这种行为而遇到问题。工作内存集是否可能因为数据库在增长并且使用越来越频繁而增长?
可能不是,见 1
是的。问题在于您的硬件是否可以处理它,以及您的存储过程有多复杂。而对此没有一个好的一刀切答案。做一些基准测试。
不,事实上,这就是数据库建立的目的(好吧,其中之一)。
是的,这是可能的,但是您可能想在花时间这样做之前确定这是否存在问题。
是的,当 SQL Server 需要的内存超过您所限制的内存时,这将会给您带来麻烦。