CACHESTORE_SQLCP几天后,SQL计划占用超过38 GB的内存。
我们已经在运行“优化临时工作负载”选项。(实体框架和自定义报告会产生很多特殊条件!)
具有多可用区镜像的AWS RDS上的SQL Server 2016 SE 3.00.2164.0.v1
当我跑步时:
DBCC FREESYSTEMCACHE('SQL Plans');
要么
DBCC FREEPROCCACHE
要么
DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL
要么
DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;
它似乎无法清除:
SELECT TOP 1 type, name, pages_kb FROM sys.dm_os_memory_clerks ORDER BY pages_kb desc
type name pages_kb
CACHESTORE_SQLCP SQL Plans 38321048
我在启用查询存储的情况下运行,但是我禁用了它以查看是否有任何干扰,这似乎没有帮助,但我将其保留了下来。
真正奇怪的是
SELECT COUNT(*) FROM sys.dm_exec_cached_plans
是1-3左右(似乎只显示当前正在运行的查询),即使所有内存已保留,甚至在我尝试清除任何内容之前。我想念什么?
CACHESTORE_SQLCP占用了所有可用内存的60%以上,这是一个令人担忧的问题,因为偶尔会有内存等待发生。另外,我们不得不在周末结束一个持续4个小时的例行DBCC CHECKDB,因为没有足够的内存堆积等待时间(它立即完成,PHYSICAL_ONLY处于打开状态,没有错误)。
有什么方法可以回收此内存(除了每晚重新启动!?)?
从评论/答案更新
当我跑步
SELECT * FROM sys.fn_my_permissions(NULL,NULL)
我懂了
entity_name subentity_name permission_name
server CONNECT SQL
server CREATE ANY DATABASE
server ALTER ANY LOGIN
server ALTER ANY LINKED SERVER
server ALTER ANY CONNECTION
server ALTER TRACE
server VIEW ANY DATABASE
server VIEW ANY DEFINITION
server VIEW SERVER STATE
server ALTER SERVER STATE
server CREATE SERVER ROLE
server ALTER ANY SERVER ROLE
其中包括所需的ALTER SERVER STATE
权限。
的输出DBCC FREEPROCCACHE
是
DBCC执行完成。如果DBCC打印了错误消息,请与系统管理员联系。
这是标准消息。RDS不支持的其他DBCC功能会给出有关权限的错误消息。
(一天之后,再次运行之后,SQL计划仍然是38,321,280 kb)
从评论/答案更新
SELECT pool_id, name, cache_memory_kb, compile_memory_kb FROM sys.dm_resource_governor_resource_pools
输出:
pool_id name cache_memory_kb compile_memory_kb
1 internal 38368408 1168080
DBCC FREEPROCCACHE ('internal')
没有做任何不同的事情
更新资料
SQL错误日志每次记录以下内容:
2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Object Plans' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.
2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'SQL Plans' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.
2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Bound Trees' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.
更新资料
RDS上的引擎版本已从13.00.2164.0.v1升级到13.00.4422.0.v1。尽管已将其设置为自动次要版本升级,但似乎并没有使我们保持最新。这个周末将重新启动并安装该软件,以查看是否有帮助。