-- =================================================================================================================== -- SQLI-WIN-002: Serveren har næsten ingen ledig hukommelse -- =================================================================================================================== -- Regel-id: SQLI-WIN-002 -- Titel: Serveren har næsten ingen ledig hukommelse -- Alvor: Medium; High under 2 % og under 256 MB. -- Versioner: Windows Server 2008 R2 og nyere. -- -- Hvad tjekkes, og hvorfor: -- Når Windows løber tør for ledig hukommelse, flyttes data til sidefilen, alt bliver langsomt, og processer kan fejle -- med "out of memory". SQL Server kan blive tvunget til at give hukommelse tilbage. -- -- Vurdering (sker i C# ud fra de indsamlede data, ikke på den overvågede server): -- Ledig hukommelse er Memory\Available MBytes; andelen er den i forhold til Win32_OperatingSystem.TotalVisibleMemorySize. -- Gennemsnittet over de seneste 5 minutter (mindst 80 % dækket) sammenlignes med begge grænser. -- -- Grænseværdier (agentens appsettings.json): -- SQLInsight:Servers:Memory:AvailablePercent standard 5 (andel ledig af den samlede hukommelse) -- SQLInsight:Servers:Memory:AvailableMegabytes standard 1024 (ledig hukommelse i MB) -- Begge skal være under grænsen (gennemsnit over 5 minutter), så store SQL Server-hosts, der bevidst har lidt -- tilbage, men stadig flere GB, ikke giver fund. -- -- Rettigheder på den overvågede server (db/permissions/grant-windows-server.ps1, aldrig lokal administrator): -- Performance Monitor Users + WMI Enable Account/Remote Enable på root\cimv2 -- WS-Man: Remote Management Users · DCOM: Distributed COM Users -- -- Data kommer fra (collector, fil – medlemmer, interval): -- src/SQLInsight.Servers/CimWindowsServerSource.cs – Session.GetPerformanceAsync (CimQueries.MemoryQuery) og -- Session.GetOperatingSystemAsync (CimQueries.OperatingSystemQuery), hvert minut fra -- src/SQLInsight.Agent/Servers/ServerMonitor.cs – CollectPerformanceAsync. -- Regelkode: src/SQLInsight.Rules/Servers/WindowsServerRules.cs : ServerMemoryRule -- -- Read-only: Ja. Reglen sender ingen SQL. Agenten læser kun fra Windows: CIM/WQL-forespørgsler (SELECT), -- hændelsesloggen og for planlagte opgaver Task Schedulers skrivebeskyttede GetInfo. Den starter, stopper -- eller ændrer intet på serveren. Filen indeholder kun kommentarer; forespørgslerne mod Windows står herunder. -- =================================================================================================================== -- Reglen bruger ikke SQL. Forespørgslerne mod Windows står herunder; filen indeholder kun kommentarer og ændrer intet. -- -- CIM/WQL (namespace root\cimv2): -- SELECT AvailableMBytes, PagesPersec, CommittedBytes, CommitLimit, Timestamp_PerfTime, Frequency_PerfTime FROM Win32_PerfRawData_PerfOS_Memory -- SELECT Caption, Version, BuildNumber, LastBootUpTime, TotalVisibleMemorySize, CSName FROM Win32_OperatingSystem -- -- Efterprøv med PowerShell (skrivebeskyttet; kør på agentens server som agentens konto): -- $s = New-CimSession -ComputerName SERVER -- $m = Get-CimInstance -CimSession $s -Query "SELECT AvailableMBytes FROM Win32_PerfRawData_PerfOS_Memory" -- $o = Get-CimInstance -CimSession $s -Query "SELECT TotalVisibleMemorySize FROM Win32_OperatingSystem" -- "{0} MB ledig ({1:N1} %)" -f $m.AvailableMBytes, (100 * $m.AvailableMBytes * 1024 / $o.TotalVisibleMemorySize)