Pro*_*ame 15 sql-server optimization memory sql-server-2016 amazon-rds
CACHESTORE_SQLCP Sql 计划在几天后占用 > 38 GB。
我们已经在运行“优化临时工作负载”选项。(实体框架和自定义报告创建了很多临时!)
具有多可用区镜像的 AWS RDS 上的 SQL Server 2016 SE 3.00.2164.0.v1
当我运行时:
DBCC FREESYSTEMCACHE('SQL Plans');
Run Code Online (Sandbox Code Playgroud)
或者
DBCC FREEPROCCACHE
Run Code Online (Sandbox Code Playgroud)
或者
DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL
Run Code Online (Sandbox Code Playgroud)
或者
DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;
Run Code Online (Sandbox Code Playgroud)
它似乎没有清除它:
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
Run Code Online (Sandbox Code Playgroud)
我在启用查询存储的情况下运行,但我禁用了它以查看是否有任何干扰,它似乎没有帮助,但我将其关闭。
真正奇怪的是
SELECT COUNT(*) FROM sys.dm_exec_cached_plans
Run Code Online (Sandbox Code Playgroud)
是 1-3 左右(它似乎只显示显示当前正在运行的查询),即使所有内存都已保留,甚至在我尝试清除任何内容之前。我错过了什么?
CACHESTORE_SQLCP 占用了所有可用内存的 60% 以上,这是一个问题,因为偶尔会发生内存等待。此外,我们不得不在周末终止一个持续 4 小时的例行 DBCC CHECKDB,因为内存不足导致等待(它立即完成,没有错误,打开 PHYSICAL_ONLY)。
有没有办法回收这些内存(除了每晚重启!?)?
当我跑
SELECT * FROM sys.fn_my_permissions(NULL,NULL)
Run Code Online (Sandbox Code Playgroud)
我得到
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
Run Code Online (Sandbox Code Playgroud)
其中包括所需的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
Run Code Online (Sandbox Code Playgroud)
输出:
pool_id name cache_memory_kb compile_memory_kb
1 internal 38368408 1168080
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)
RDS 引擎版本从 13.00.2164.0.v1 升级到 13.00.4422.0.v1。虽然它设置为自动次要版本升级,但它似乎并没有让我们更新到最新版本。本周末将重新启动并安装它,看看它是否有帮助。
我升级到 13.00.4422.0.v1 (SQL Server 2016 SP1) 并重新启动。
到目前为止,我可以使用DBCC FREESYSTEMCACHE('SQL Plans');命令清除 SQL 计划内存!
时间会证明它现在是否更明智地使用内存,但至少现在我有办法在它再次变得过于臃肿时重置它。
| 归档时间: |
|
| 查看次数: |
2412 次 |
| 最近记录: |