我们有Microsoft SQL Server 2017 (RTM-GDR) (KB4583456) - 14.0.2037.2 (X64) Nov 2 2020 19:19:59 Copyright (C) 2017 Microsoft Corporation Standard Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: )
服务器实际安装了256 GB的RAM。Server的内存限制设置为210 GB。我注意到,服务器在进行查询时每个查询请求39 GB内存(210 * 0.7
我们有一个具有混合OLAP/OLTP工作负载的数据库。查询非常特别,是在中间层应用程序服务器中动态创建的。当我们启动服务器时,性能是可以接受的,但是内存消耗越来越多,直到所有可用内存(30 we )耗尽为止。在那之后,系统变得越来越慢。
像Dbcc freeproccache这样的命令没有效果。
select * from sys.dm_tran_session_transactions中的事务不多(不超过系统正常时),有时此列表为空。
dbcc memorystatus的第一个结果是
VM Reserved 42136628
VM Committed
我被要求在客户端设备上对承载我们应用程序的服务器进行故障排除。
在过去一周半的时间里,客户曾两次向我们投诉。在一种情况下,他们声称服务器的内存被“耗尽”,而在另一种情况下,他们声称CPU被“耗尽”。在这两种情况下,我们的应用程序变得不可用,客户机被迫重新启动服务器。
服务器规范如下:
System Manufacturer Dell Inc.
System Model PowerEdge R320
System Type x64-based PC
Processor Intel(R) Xeon(R) CPU E5-2430 0 @ 2.20GHz, 2200 Mhz, 6 Core
有谁知道MS 2014标准版的设置或触发器会在系统内存使用率超过90%时触发SQL开始使用CPU%。我有一个小应用程序,它没有访问SQL,但确实使用了大量的内存。当系统上的内存到达90%+利用率时,Server开始连续显示CPU使用情况,直到工具集停止为止。
我已经运行了多个分析,例如分析器、查询以查看最后处理的语句、到数据库的连接等.没有什么比SQL Server的触发器更突出的了。更奇怪的是,这台特定的机器上同时有SQL Server 2014标准和SQL Server express,这两个版本都会触发峰值(这不是我的服务器,而是我必须处理的服务器)。
为了研究查询计划的使用情况,我试图了解存储在内存中的查询计划的类型。
使用此查询:
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
我正在尝试理解SQL Server的内存管理。我有一个64 GB内存的虚拟环境下的Windows 2019。我还安装了Server 2019,最大服务器内存为59776 MB。通过使用以下查询,我找到了所有内存管理员的列表:
SELECT [type] AS [ClerkType], SUM(pages_kb) / 1024 AS [SizeMb]
FROM sys.dm_os_memory_clerks WITH (NOLOCK)
GROUP BY [type]
ORDER BY SUM(pages_kb) DESC
所有内存记录的总和等于23523 MB。
Value for MEMOR