我的生产服务器中有 200 GB 的数据库。
系统要求:Amazon EC2 r4.2xlarge(8 个 vCPU,61 GB 内存)
我检查,计划计数与查询:
SELECT objtype AS [CacheType]
, count_big(*) AS [Total Plans]
, sum(cast(size_in_bytes as decimal(18,2)))/1024/1024 AS [Total MBs]
, avg(usecounts) AS [Avg Use Count]
, sum(cast((CASE WHEN usecounts = 1 THEN size_in_bytes ELSE 0 END) as decimal(18,2)))/1024/1024 AS [Total MBs - USE Count 1]
, sum(CASE WHEN usecounts = 1 THEN 1 ELSE 0 END) AS [Total Plans - USE Count 1]
FROM sys.dm_exec_cached_plans
GROUP BY objtype
ORDER BY [Total MBs - USE Count 1] DESC
计划数量随着时间的推移而增加,我看到总共有 3K 个计划。10-15 分钟后,我检查计划计数。
计划总数 200-600
结果:
为什么会这样?
我没有跑步DBCC FREEPROCCACHE
。
自动关闭是错误的。我关闭了内存压力的parallisim和复制。PLE 7600,但数值也不时下降。
我没有检查计划在 3K 时使用了多少空间。但是,我现在检查看到 900-1K 计划和 250-300 MB。然后它被冲洗掉。
通常,查询等待时间小于 1 秒。平均 200 毫秒。前 3个等待类型CXPACKET
,,CLR_AUTO_EVENT
。SOS_SCHEDULER_YIELD
我知道缓存压力限制(计划可能因内存压力而被驱逐)但经常这样做是否正常?冲洗 2-3 分钟。
微软 SQL 服务器 2016 (SP1)。
SQL Server 的最大内存设置为默认值。我将最大内存更改为 90%(56240MB,总内存 61GB)。
我认为问题已经解决了。