One reviewable file per rule id with a Danish header: what and why, thresholds with config keys and defaults, severity, required rights (never local administrator), supported versions, collector file and member, and the evaluation in plain Danish. The Windows rules use no SQL: their exact CIM/WQL queries, event log XPath and a read-only PowerShell snippet to verify them are in a comment block. SQLI-SYN-001/002 carry the exact SQL a SQL check runs (session settings, transaction that is always rolled back, SELECT 1). A test checks every server and check rule has its file. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
45 lines
2.5 KiB
SQL
45 lines
2.5 KiB
SQL
/*
|
||
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)
|
||
*/
|