过程缓存丢弃

Hpk*_*Hpk 6 sql-server cache

我们遇到了 SQL Server 突然删除 proc 缓存的问题。

我在 2 分钟内将 4GB 降为 0。在过去的两周里,这种情况大约每天发生一次。

它确实发生在随机时间并且与过程不一致。

有没有人见过这个?

据我所知,只有在DBCC FREEPROCCACHE执行或重新启动 SQL 时才会擦除缓存。

版本:Microsoft SQL Server 2005 - 9.00.4226.00 (X64) 2009 年 5 月 26 日 14:58:11 版权所有 (c) 1988-2005 Microsoft Corporation Enterprise Edition(64 位),Windows NT 5.2(内部版本 3790:Service Pack 2)

32GB RAM
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助。

我们使用 Idera SQL 诊断管理器。

结果:

DateTime                Proc Cache Size MB 
23/12/2015 19:19:00     4,165.63 
23/12/2015 19:25:00     4,165.71 
23/12/2015 19:32:00     4,178.93 
23/12/2015 19:38:00     4,175.44 
23/12/2015 19:44:00     4,176.87 
23/12/2015 19:50:00     4,179.80 
23/12/2015 19:57:00     207.16 
23/12/2015 20:03:00     459.66 
23/12/2015 20:09:00     510.48 
23/12/2015 20:15:00     1,795.31 
23/12/2015 20:21:00     2,830.94 
23/12/2015 20:27:00     2,859.87 
23/12/2015 20:34:00     2,877.93 
23/12/2015 20:40:00     2,891.94 
23/12/2015 20:46:00     2,908.82 
23/12/2015 20:52:00     2,921.34 
23/12/2015 20:58:00     2,975.92
Run Code Online (Sandbox Code Playgroud)

Tom*_*m V 6

原因之一可能是有人更改选项或运行 sp_configure。这将记录在您的错误日志中。

请阅读这篇文章:使用 Sp_configure 更改值会发出 DBCC FREEPROCCACHE

使用 sp_configure 更改配置值会导致 SQL Server 发出 DBCC FREEPROCCACHE 语句。

如果您使用发出更改参数的 sp_configure 调用的 SQL Server 企业管理器等 GUI,则会发生相同的行为。

SQL Server 2012 白皮书中计划缓存和重新编译提供了其他一些可能性。

刷新整个计划缓存以下操作会刷新整个计划缓存,因此会导致对之后第一次提交的批次进行全新编译:

  • 分离数据库
  • 将数据库升级到更高的数据库兼容级别
  • 恢复数据库
  • DBCC FREEPROCCACHE 命令
  • RECONFIGURE 命令(此命令的许多选项会导致刷新)
  • ALTER DATABASE … MODIFY FILEGROUP 命令
  • 使用ALTER DATABASE … COLLATE命令修改排序规则

刷新计划缓存中与数据库相关的条目以下操作刷新引用特定数据库的计划缓存条目,并在之后进行新的编译。

  • DBCC FLUSHPROCINDB 命令
  • ALTER DATABASE … MODIFY NAME = 命令
  • ALTER DATABASE … SET ONLINE 命令
  • ALTER DATABASE … SET OFFLINE 命令
  • ALTER DATABASE … SET EMERGENCY 命令
  • DROP DATABASE 命令
  • 当数据库自动关闭时

许多这些事件应该在您的日志文件中。