Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2008计划缓存几乎总是空的_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server SQL Server 2008计划缓存几乎总是空的

Sql server SQL Server 2008计划缓存几乎总是空的,sql-server,sql-server-2008,Sql Server,Sql Server 2008,为了调查查询计划的使用情况,我试图了解内存中存储了什么样的查询计划 使用此查询: SELECT objtype AS 'Cached Object Type', COUNT(*) AS 'Numberof Plans', SUM(CAST(size_in_bytes AS BIGINT))/1048576 AS 'Plan Cache SIze (MB)', AVG(usecounts) AS 'Avg Use Counts' FROM sys.dm_exec_cached_plans

为了调查查询计划的使用情况,我试图了解内存中存储了什么样的查询计划

使用此查询:

SELECT objtype AS 'Cached Object Type', 
COUNT(*) AS 'Numberof Plans', 
SUM(CAST(size_in_bytes AS BIGINT))/1048576 AS 'Plan Cache SIze (MB)', 
AVG(usecounts) AS 'Avg Use Counts' 
FROM sys.dm_exec_cached_plans 
GROUP BY objtype  
ORDER BY objtype 
我的计划缓存结构几乎为空

服务器上有128Gb的RAM,约20%是免费的。SQL Server实例不受内存限制

是的,基本上我有临时查询(不是参数化的,不是存储过程)。
但是为什么SQL Server如此频繁地清空查询计划缓存?我有什么问题

如果服务器没有内存压力,那么下面列出了其他一些可能的情况

是否经常安排这些行动?您是否启用了自动关闭功能

以下操作将刷新整个计划缓存,因此, 使第一次提交的批重新编译 之后:

  • 分离数据库
  • 将数据库升级到SQL Server 2005
  • 将数据库升级到SQL Server 2008
  • 还原数据库
  • DBCC FREEPROCCACHE命令
  • 重新配置命令
  • ALTER DATABASE、、MODIFY FILEGROUP命令
  • 使用ALTER DATABASE…COLLATE命令修改排序规则
  • 以下操作将刷新引用的计划缓存项 特定的数据库,并导致以后重新编译

  • DBCC FLUSHPROCINDB命令
  • ALTER DATABASE…MODIFY NAME=命令
  • ALTER DATABASE…SET ONLINE命令
  • ALTER DATABASE…SET OFFLINE命令
  • 改变数据库…设置紧急命令
  • 删除数据库命令
  • 当数据库自动关闭时
  • 使用CHECK选项创建视图时,将刷新在其中创建视图的数据库的计划缓存项
  • 运行DBCC CHECKDB时,将创建指定数据库的副本。作为DBCC CHECKDB执行的一部分,针对 执行复制副本,并缓存其计划。在DBCC的末尾 执行CHECKDB时,副本将被删除,查询计划也将被删除 在复制副本上提出的查询
  • 以下
    sp\u配置
    /
    重新配置
    操作:

    • 访问检查缓存桶计数
    • 访问检查缓存配额
    • 已启用clr
    • 并行性的成本阈值
    • 跨数据库所有权链接
    • 索引创建内存
    • 最大平行度
    • 最大服务器内存
    • 最大文本回复大小
    • 最大工作线程数
    • 每个查询的最小内存
    • 最小服务器内存
    • 查询调控器成本限制
    • 查询等待
    • 远程查询超时
    • 用户选项

    最后,只有实例重启解决了我的问题。现在plan cache看起来更健康了。

    大约一周前我也遇到了同样的问题,并且还发布了几个问题。尽管我还没有找到问题的答案,但我对这个过程有了一些见解。虽然听起来很傻,但SQL Server服务重新启动有助于解决另一个问题—恢复过程持续了4个小时。似乎有一笔相当大的交易


    我不太清楚。但我能猜到的东西很少,比如大多数人都在使用重新编译,或者大多数程序都是动态的。@kumarnope。我没有与重新编译或动态SQL一起使用。您是否设置了“为临时优化”设置?@AllanS.Hansen否。它设置为
    false
    。否。未计划这些操作。自动关闭设置为false。sys.dm_exec_query_stats中的最小创建时间是多少?当时服务器上有什么日志吗?从应用程序发送的任何查询是否会发送重新配置或任何其他有问题的命令?最小创建时间刚刚开始。服务器日志中没有可疑活动,应用程序不会发送有问题的命令。该服务器上的其他实例感觉良好。它们的查询计划缓存是相当持久的。