-- =================================================================================================================== -- SQLI-WIN-003: Serveren pager hukommelse til disk -- =================================================================================================================== -- Regel-id: SQLI-WIN-003 -- Titel: Serveren pager hukommelse til disk -- Alvor: Medium. -- Versioner: Windows Server 2008 R2 og nyere. -- -- Hvad tjekkes, og hvorfor: -- Windows læser og skriver hukommelsessider til sidefilen, fordi der ikke er plads i RAM. Det er mange gange -- langsommere end hukommelse og belaster disken, som andre også bruger. -- -- Vurdering (sker i C# ud fra de indsamlede data, ikke på den overvågede server): -- Pages/sec er en PERF_COUNTER_COUNTER: (Δ PagesPersec) / (Δ Timestamp_PerfTime / Frequency_PerfTime) mellem to -- læsninger. Er gennemsnittet over 15 minutter mindst grænsen, og den ledige andel samtidig under 10 %, er det et fund. -- -- Grænseværdier (agentens appsettings.json): -- SQLInsight:Servers:Memory:PagesPerSecond standard 1000 (Memory\Pages/sec, gennemsnit over 15 minutter) -- Kun sammen med lidt ledig hukommelse (under 10 % i samme periode): Pages/sec alene er også fil-I/O gennem -- memory-mapped filer og er ikke i sig selv et problem. -- -- 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), hvert minut -- fra src/SQLInsight.Agent/Servers/ServerMonitor.cs – CollectPerformanceAsync. -- Beregning: src/SQLInsight.Core/Servers/ServerPerformance.cs – ServerPerformanceMath.PagesPerSecond. -- Regelkode: src/SQLInsight.Rules/Servers/WindowsServerRules.cs : ServerPagingRule -- -- 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 -- -- Efterprøv med PowerShell (skrivebeskyttet; kør på agentens server som agentens konto): -- $s = New-CimSession -ComputerName SERVER -- $q = "SELECT PagesPersec, Timestamp_PerfTime, Frequency_PerfTime FROM Win32_PerfRawData_PerfOS_Memory" -- $a = Get-CimInstance -CimSession $s -Query $q; Start-Sleep -Seconds 60; $b = Get-CimInstance -CimSession $s -Query $q -- ($b.PagesPersec - $a.PagesPersec) / (($b.Timestamp_PerfTime - $a.Timestamp_PerfTime) / $b.Frequency_PerfTime)