/* SQLI-WIN-003 – Serveren pager hukommelse til disk ================================================== Hvad 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. Tærskler (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. Alvor Middel. 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 Understøttede versioner Windows Server 2008 R2 og nyere. Collector 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. Regel src/SQLInsight.Rules/Servers/WindowsServerRules.cs – ServerPagingRule Evaluering 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. 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) */