sqlinsight-pro/README.md
2026-09-29 05:06:16 +00:00

206 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SQLInsight Pro
**Gratis, on-prem overvågning af SQL Server med dyb ekspertise indbygget. Betalt support til dem der har brug for det.**
SQLInsight Pro er et overvågningsværktøj til Microsoft SQL Server, skrevet i C# på .NET. Det kører hos kunden og forlader ikke netværket, medmindre kunden selv vælger det. Værktøjet nøjes ikke med at vise tal. Det forklarer, hvad der er galt, hvorfor det er et problem, og hvordan det løses. Rådene har samme niveau som dem, man får fra en erfaren DBA.
> **Status:** Projektet er i idéfasen. Der er endnu ingen kode. Se [Roadmap](#roadmap).
---
## Vision
De fleste gratis værktøjer til SQL Server kan vise, *at* noget er galt, fx blocking, høj CPU eller lange ventetider. Men de siger sjældent *hvorfor*, og endnu sjældnere *hvad man skal gøre*. De kommercielle værktøjer er dyre og låser ofte den vigtigste viden bag en licens.
SQLInsight Pro vil gøre det anderledes:
1. **Hele produktet er gratis.** Overvågning, analyse og anbefalinger koster ikke noget. Vi fjerner ikke funktioner for at sælge en betalt version.
2. **Dyb SQL Server-ekspertise.** Hvert fund kommer med en forklaring, en vurdering af alvor, konkret evidens og et forslag til løsning, fx et script, en konfiguration eller en ændring af et index.
3. **On-prem først.** Agenten, databasen og web-UI'et kører i kundens eget miljø. Der sendes ingen data ud, uden at kunden aktivt har slået det til.
4. **Altid opdateret.** Selve værktøjet og regel-/vidensbasen opdateres løbende, så nye SQL Server-versioner, CU'er og kendte fejl bliver dækket.
5. **Betalt support er en service, ikke en funktion.** Kunder, der betaler, får adgang til mennesker med prioritet, og ikke til flere knapper i programmet.
---
## Forretningsmodel
| | **Community** | **Professional** | **Enterprise** |
|---|---|---|---|
| Pris | Gratis | Abonnement | Abonnement |
| Al overvågning og analyse | ✅ | ✅ | ✅ |
| Opdateringer af værktøj og regelpakker | ✅ | ✅ | ✅ |
| Community support (GitHub Discussions / forum) | ✅ | ✅ | ✅ |
| Prioriteret mailsupport med svartidsgaranti | – | ✅ | ✅ |
| Telefonsupport | – | – | ✅ |
| Findings-sync til SQLInsight Hub (proaktiv opfølgning) | – | Valgfrit | ✅ |
| Hjælp til fortolkning af fund og tuning | – | Begrænset | ✅ |
Professional og Enterprise låser ikke op for funktioner i softwaren. De giver adgang til **ekspertise og svartid**. Når en betalende kunde slår *findings-sync* til, kan supportteamet se kundens aktuelle problemer, før kunden ringer.
---
## Hvad analyseres? (dyb ekspertise, ikke kun låsninger)
Blocking og deadlocks er kun ét område. Regelmotoren dækker hele SQL Server-instansen:
**Performance**
- Wait statistics med fortolkning (hvilke waits er normale, og hvilke peger på et reelt problem)
- Blocking-kæder, head blockers og deadlock-grafer med analyse af årsagen
- Query Store: plan-regressioner, forcerede planer der fejler, og queries med høj varians
- Parameter sniffing og planer, der er følsomme over for parametre
- Plan cache-analyse: implicitte konverteringer, key lookups, spills, manglende statistikker og for store memory grants
- CPU-pres, scheduler-pres og worker thread exhaustion
- Memory grants, RESOURCE_SEMAPHORE og buffer pool-pres
- I/O-latens pr. fil og pr. database
- TempDB-contention (PFS/GAM/SGAM) og konfiguration af TempDB
**Indexes og statistikker**
- Manglende indexes, vurderet kritisk (ikke bare DMV-forslagene ukritisk videregivet)
- Ubrugte, duplikerede og overlappende indexes
- Forældede statistikker og ascending key-problemer
- Heaps med forwarded records
**Konfiguration og best practice**
- MAXDOP, cost threshold for parallelism, max server memory og optimize for ad hoc workloads
- Database scoped configurations og compatibility level
- Antal VLF'er, autogrowth-indstillinger og placering af filer
- Trace flags og deres relevans for den aktuelle version
**Drift og sikkerhed for data**
- Backup-dækning og RPO i forhold til recovery model
- Status for DBCC CHECKDB og tegn på korruption (suspect pages, 823/824/825)
- Sundhed for Always On Availability Groups (send/redo queue, synkroniseringsstatus)
- SQL Agent-jobs der fejler, og vigtige fejl i error log
**Version og patch-niveau**
- Registrering af SQL Server-version, edition og CU-niveau
- Advarsel ved manglende CU'er eller sikkerhedsopdateringer og ved versioner, der ikke længere supporteres
- Kendte fejl, der rammer den installerede build, med link til Microsofts dokumentation
Hvert **finding** indeholder:
- **Titel og alvor** (Info / Lav / Middel / Høj / Kritisk)
- **Evidens**: de konkrete målinger, queries eller objekter, der udløste fundet
- **Forklaring**: hvorfor det er et problem, skrevet så både DBA'er og udviklere kan følge med
- **Anbefaling**: konkrete trin og, hvor det giver mening, et script (som aldrig køres automatisk)
- **Referencer**: Microsoft Learn og anden anerkendt dokumentation
---
## Arkitektur
```
┌──────────────────────── Kundens netværk (on-prem) ────────────────────────┐
│ │
│ ┌───────────────┐ DMV'er, Query Store, ┌──────────────────────────┐ │
│ │ SQL Server(e) │◄──Extended Events───────►│ SQLInsight Agent │ │
│ └───────────────┘ │ (Windows Service / │ │
│ │ Linux systemd) │ │
│ │ • Collectors │ │
│ │ • Regelmotor + regelpak.│ │
│ └────────────┬─────────────┘ │
│ │ │
│ ┌────────────▼─────────────┐ │
│ │ Lokalt repository │ │
│ │ (SQL Server-database) │ │
│ └────────────┬─────────────┘ │
│ │ │
│ ┌────────────▼─────────────┐ │
│ │ SQLInsight Web │ │
│ │ (ASP.NET Core + Blazor) │ │
│ └────────────┬─────────────┘ │
└──────────────────────────────────────────────────────────┼────────────────┘
│ HTTPS (opt-in,
│ kun betalende)
┌────────────▼─────────────┐
│ SQLInsight Hub │
│ Ingestion API │
│ (ASP.NET Core) │
└────────────┬─────────────┘
│
┌────────────▼─────────────┐
│ PostgreSQL │
│ Findings fra alle │
│ betalende kunder │
└──────────────────────────┘
```
### Komponenter
| Komponent | Teknologi | Ansvar |
|---|---|---|
| **SQLInsight.Agent** | .NET Worker Service | Indsamler data, kører regelmotoren og gemmer fund lokalt |
| **SQLInsight.Rules** | C#-bibliotek + versionerede regelpakker | Den samlede SQL Server-ekspertise som testbare regler |
| **SQLInsight.Web** | ASP.NET Core + Blazor | Dashboard, fund, historik, trends og administration |
| **SQLInsight.Updater** | .NET | Tjekker for og installerer nye versioner af værktøj og regelpakker |
| **SQLInsight.Hub** | ASP.NET Core + EF Core (Npgsql) | Centralt API, der modtager fund fra betalende kunder og skriver dem til PostgreSQL |
| **SQLInsight.Hub.Portal** | ASP.NET Core + Blazor | Internt overblik: hvilke kunder har hvilke problemer, og hvor alvorlige er de? |
### Designprincipper
- **Kun læseadgang til overvågede servere.** Agenten kræver `VIEW SERVER STATE` / `VIEW SERVER PERFORMANCE STATE` og ingen sysadmin-rettigheder. Den ændrer aldrig noget på serveren.
- **Lav overhead.** Collectors er lette, bruger adaptive intervaller og har en indbygget grænse for, hvor meget de må belaste serveren.
- **Findings-sync er opt-in og gennemsigtig.** Kunden kan se præcis, hvad der sendes. Som standard sendes kun fund og metadata, ikke data fra tabellerne. Querytekst kan anonymiseres eller udelades. Forbindelsen er TLS-krypteret og autentificeret med kundens licensnøgle.
- **Hub'en er aldrig en direkte databaseforbindelse.** Agenten taler med et HTTPS-API og aldrig direkte med PostgreSQL.
- **Regler er data med tests.** Hver regel har unit tests med kendte input og forventede fund, så ekspertisen kan udbygges uden regressioner.
- **Opdateringer er signerede.** Både binære filer og regelpakker er kodesignerede og verificeres, før de installeres.
---
## Roadmap
### Fase 0: Fundament
- [ ] Solution-struktur (.NET 10 LTS): Agent, Rules, Web, Hub, fælles domænemodel
- [ ] CI-pipeline (build, test, statisk analyse)
- [ ] Datamodel for findings (fælles kontrakt mellem Agent og Hub)
- [ ] Bidragsguide, code of conduct og issue templates
### Fase 1: Community MVP
- [ ] Agent som Windows Service med forbindelse til en eller flere SQL Server-instanser
- [ ] Collectors: wait stats, blocking, deadlocks (XE), CPU/memory, I/O-latens og konfiguration
- [ ] Regelmotor med de første ~30 regler, som hver har forklaring og anbefaling
- [ ] Lokalt repository med retention-politik
- [ ] Web-UI: serveroversigt, liste over fund, detaljevisning og simple trends
- [ ] Registrering af version og CU-niveau med advarsel om manglende opdateringer
- [ ] MSI-installer og dokumentation
### Fase 2: Dyb analyse
- [ ] Integration med Query Store: regressioner, analyse af planændringer og parameter sniffing
- [ ] Plan cache- og showplan-analyse (implicitte konverteringer, spills, lookups)
- [ ] Index- og statistikanalyse
- [ ] Always On AG, backup/CHECKDB og SQL Agent
- [ ] Baselines og anomali-detektion (hvad er "normalt" for netop denne server?)
- [ ] Notifikationer via e-mail, Teams og webhook
- [ ] Linux-agent (systemd) og understøttelse af Azure SQL Managed Instance
### Fase 3: Kommerciel platform
- [ ] Licensmodel: signerede licensnøgler, der kan verificeres offline
- [ ] Auto-update af værktøj og regelpakker med stable- og preview-kanal
- [ ] Findings-sync fra Agent til Hub API med kø og retry ved netværksfejl
- [ ] SQLInsight Hub med PostgreSQL: modtagelse, deduplikering og historik pr. kunde
- [ ] Hub-portal: overblik over kunder, de mest kritiske fund og tendenser på tværs af kunder
- [ ] Integration med support-flowet: fund kan knyttes til en supportsag
- [ ] Dokumentation til databehandleraftale (GDPR)
### Fase 4: Videre
- [ ] Anbefalinger på tværs af kunder: "denne CU har løst problemet hos andre"
- [ ] Rapporter (PDF) til ledelse og compliance
- [ ] Mulighed for, at community selv bidrager med regler
- [ ] API til integration med eksisterende monitorering (Prometheus, Grafana, SCOM)
---
## Understøttede versioner (mål)
- SQL Server 2016 SP3 og nyere (2017, 2019, 2022, 2025)
- Standard, Enterprise og Developer edition
- Senere: Azure SQL Managed Instance og SQL Server på Linux
---
## Bidrag
Projektet er i en tidlig fase. Idéer til regler, eller eksempler på SQL Server-problemer du gerne vil have værktøjet til at fange, er meget velkomne som issues.
## Licens
[MIT](LICENSE)