SQL Server 2012 内存使用量稳步增长

SQL Server 2012 内存使用量稳步增长

我非常担心运行数据库的 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 的连接,执行调用,然后关闭每次调用的连接)。数据库文件仅在一个文件组中组织,恢复类型设置为简单。诊断问题的一些问题:

  1. 记忆力稳步增长正常吗?
  2. 我在数据库设计中是否犯了可能导致此行为的错误?(没有明确的临时表删除、文件组组织等)
  3. SQL Server 是否可以管理这样的存储过程调用率(每 5 秒 100 次调用,即每 5 秒 100 次 upsert,超出中间计算)?
  4. 连续的“打开连接/执行 sp 调用/关闭连接”模式会干扰 SQL Server 吗?
  5. 是否可以诊断出导致这种内存使用的原因?也许是等待请求的队列?(我运行了 sp_who2,但没有看到来自外部应用程序的大量孤立连接)
  6. 如果我限制 SQL Server 可以使用的内存量,我迟早会遇到麻烦吗?

答案1

  1. 有点/视情况而定。SQL Server 通常会占用尽可能多的内存(通常比它实际使用的内存多得多)。不要担心,除非您确实因这种行为而遇到问题。工作内存集是否可能因为数据库在增长并且使用越来越频繁而增长?

  2. 可能不是,见 1

  3. 是的。问题在于您的硬件是否可以处理它,以及您的存储过程有多复杂。而对此没有一个好的一刀切答案。做一些基准测试。

  4. 不,事实上,这就是数据库建立的目的(好吧,其中之一)。

  5. 是的,这是可能的,但是您可能想在花时间这样做之前确定这是否存在问题。

  6. 是的,当 SQL Server 需要的内存超过您所限制的内存时,这将会给您带来麻烦。

相关内容