Artikelen over SQL Server uit de praktijk
Executieplannen, indexen, performance tuning en Azure SQL — geschreven vanuit dertig jaar DBA-praktijk. Nieuwe artikelen verschijnen regelmatig.
Fabric demo: Azure SQL and local SQL into one warehouse table
Een PowerShell-demo die één klant uit Azure SQL en één uit een lokale SQL Server in één Fabric-warehousetabel laadt, de data met T-SQL verrijkt en als rapportagetabel publiceert. Elke stap is een script en één opruimscript haalt alles weer weg. (Engelstalig)
Lees op dbaronald.nl → -- datamodel · diagramsDatamodel Diagrams
Wie stemt voor het verwijderen van de "Create Diagram"-functie in SSMS? PowerDesigner en SSMS-diagrammen waren ooit de standaard, maar AI doet het inmiddels beter: Claude genereert bruikbare datamodel-diagrammen zonder het handmatige geschuif dat SSMS 22 nog steeds vergt — met een algemeen datamodel, een diagram gefocust op één tabel en een side-by-side vergelijking met SSMS 22's eigen resultaat. (Engelstalig)
Lees op dbaronald.nl → -- left join · on vs whereLEFT JOIN: why your filter returns too many rows — or too few
Eén query, drie versies: boekingen filteren op het ontbreken van een factuur met status Exported of Printed levert compleet verschillende resultaten op, afhankelijk van of het filter in de ON- of de WHERE-clause staat. Eén onderliggende regel verklaart het verschil. (Engelstalig)
Lees op dbaronald.nl → -- adaptive joins · bitmap filteringExecution Plan: Adaptive Joins
SQL Server's adaptive join kiest tijdens executie dynamisch tussen een nested loop join en een hash join, aan de hand van een bitmap-filter (bloom filter) op transacties tegen een lijst geblokkeerde kaarten. Het artikel legt de mechaniek uit — inclusief false positives, memory grants en de rol van indexontwerp — bij het bepalen welke joinstrategie wint. (Engelstalig)
Lees op dbaronald.nl → -- duckdb · columnstoreIn The Ring.. On the Left Side DuckDB, on the Right Side We Have SQL Server Columnstore..
Een vergelijking van DuckDB en SQL Server Columnstore-indexen op de Backblaze drive-dataset (559+ miljoen rijen). Group by op een expressie versus een kale kolom blijkt cruciaal voor de performance — een query van 4,7 seconden naar 0,058 seconden via aggregate pushdown. (Engelstalig)
Lees op dbaronald.nl → -- inserts · last-page contentionFaster Inserts Using OPTIMIZE_FOR_SEQUENTIAL_KEY
Benchmarks van SQL Server's OPTIMIZE_FOR_SEQUENTIAL_KEY tegen last-page insert contention: tot 35% sneller zodra het aantal gelijktijdige insert-sessies het aantal schedulers overschrijdt, met stabiele doorvoer van 25.000-27.000 rijen/sec — bij weinig concurrentie nauwelijks verschil. (Engelstalig)
Lees op dbaronald.nl → -- index maintenance · fragmentatieIndex Maintenance .. the good, the bad and you decide if it's ugly..
Een oplopende IDENTITY-sleutel houdt na veel inserts ~99,7% pagedichtheid; een willekeurige GUID-sleutel eindigt op dezelfde workload op 98% fragmentatie bij 62% dichtheid. REORGANIZE versus REBUILD getest tegen Jeff Modens "Low Threshold Rebuild"-aanpak — de low-threshold strategie kostte 11x minder onderhoudstijd en eindigde tóch minder gefragmenteerd. (Engelstalig)
Lees op dbaronald.nl → -- backup chain · LSNBackup @CleanupTime constallations.. all green untill red?!
Een restore-keten die er "helemaal groen" uitziet maar tóch breekt bij een point-in-time restore: verwijderde backupbestanden, verkeerde @CleanupTime-timing en tijdstempels die niet aansluiten. Een diagnosescript controleert de @CleanupTime-instellingen en de timing van de backupjobs en laat zien waar de LSN-keten breekt — vertrouw op LSN's, niet op bestandsdatums. (Engelstalig)
Lees op dbaronald.nl → -- performance monitoring · erik darlingNew Kid in Town: SQL Server Performance Monitoring
Erik Darlings gratis PerformanceMonitor uitrollen op een Windows Server 2022-VM om metrics van vijf SQL Servers te verzamelen in een centrale PostgreSQL-store met webdashboard — stap voor stap, inclusief de .NET 10-runtime, het serviceaccount, de JSON-config en de SQL-rechten, plus de certificaatvalidatie- en service-identiteit-valkuilen die je als eerste tegenkomt. (Engelstalig)
Lees op dbaronald.nl → -- availability groups · log backupYour AG is healthy .. until it feels a little unwell..
Midden in kantooruren komt er een alert binnen: de transactionlog-backup van een database op de primary replica is corrupt — en tóch blijft de database gewoon online en meldt de Availability Group zich "gezond". Een praktijkonderzoek naar wat er met de transactionlog gebeurde en waarom, met de volledige diagnose-aanpak in een bijbehorende GitHub-repo. (Engelstalig)
Lees op dbaronald.nl → -- blocking · extended eventsBlocking & Locking, please help..
In plaats van WITH (NOLOCK) in productie: leg blocking systematisch vast met een Extended Events-sessie op blocked_process_report, een blocked process threshold van 5 seconden en een Agent-job die elke minuut verzamelt in DBA.dbo.BlockWatch. Erik Darlings sp_HumanEventsBlockViewer maakt de XML blocked-process reports leesbaar — compleet met een BlockWatch_Demo-reproductie en 90 dagen retentie. (Engelstalig)
Lees op dbaronald.nl → -- parameter sniffing · PSPParameter Sensitive Plans (PSP) versus Parameter Sniffing
SQL Server 2022's Parameter Sensitive Plans vervangen het ene gecachete plan door een dispatcher plus maximaal drie planvarianten, ingedeeld op cardinaliteit van de parameter. Getest op Posts.ParentId in de StackOverflow-database — een kolom waar enkele waarden duizenden matches hebben en de meeste bijna nul — krijgen de zeldzame en veelvoorkomende gevallen elk hun eigen plan, herkenbaar aan predicate_range- en QueryVariantID-markeringen in het executieplan. (Engelstalig)
Lees op dbaronald.nl → -- string functions · execution plansExecution Plans of all String Functions
Drieëndertig T-SQL stringfuncties — van ASCII tot UPPER — stuk voor stuk getest tegen de StackOverflow2010-database, met een gecorreleerde scalaire subquery die de cost-schatting van de optimizer net over de parallellism-drempel duwt zodat parallelle plannen zichtbaar worden. Voor elke functie het bijbehorende executieplan. (Engelstalig)
Lees op dbaronald.nl → -- table variables · temp tablesTable Variables versus #Temp Tables
Tabelvariabelen hebben geen statistieken? Een veelgehoorde aanname — maar op recente SQL Server-versies kunnen geïndexeerde tabelvariabelen wél degelijke statistieken hebben, zichtbaar in het executieplan. Vertrouw het plan, niet de vuistregel. (Engelstalig)
Lees op dbaronald.nl → -- partitioning · index maintenanceYou Want to Partition Your Huge Table.. Ok Fine.. Let's Go.
Een bestaande, enorme tabel partitioneren zonder size-of-data operatie: een lege partition function, twee metadata-only SWITCH-operaties rond een clustered index rebuild, en daarna stapsgewijze SPLIT RANGE-calls die seeken in plaats van scannen — Michael J. Swarts techniek in de praktijk. (Engelstalig)
Lees op dbaronald.nl → -- join order · execution plansWhy Join Order Can Make or Break Your Query Performance
Zeven varianten van dezelfde query op StackOverflow2013, alleen verschillend in join-volgorde en physical operator — één forceert een hashtabel over 2,46 miljoen rijen, een andere verspilt 87% van de runtime aan nested-loop iteraties, puur omdat de verkeerde kant build/outer werd. (Engelstalig)
Lees op dbaronald.nl → -- query plan · aiAI and Where Does Query Time Go? Using Claude's Query Plan Analysis Skill
Een scalaire functie verstopt waar de tijd van een query heen gaat — Claude's execution plan-analyse skill legt het bloot, inline herschrijven met STRING_AGG en een samengestelde index maken 'm weer snel, bevestigd door sp_BlitzCache en Performance Studio. (Engelstalig)
Lees op dbaronald.nl → -- query store · aiAutomate Executionplan Analysis by Skill and Query Store
Query's uit Query Store halen, actuele executieplannen genereren en die automatisch laten analyseren door Erik Darlings execution plan-skill voor Claude Code — met concrete performance-aanbevelingen als resultaat.
Lees op dbaronald.nl → -- ai · query tuningIs AI making an end to my job as a SQL Server query tuner?
Een praktijktest: Claude leest een executieplan, ziet een Index Spool die 613 keer wordt opgebouwd en adviseert de index die een query van 73 seconden naar 435 ms brengt. Wat blijft er over voor de menselijke tuner? (Engelstalig)
Lees op dbaronald.nl → -- query processing · serieCraig Freedman herlezen: de queryprocessor-blog die na twintig jaar nog klopt
Leeswijzer bij mijn tiendelige serie over Craig Freedmans klassieke query processing-blog (2006–2010) — elk concept opnieuw getest op moderne SQL Server, met echte executieplannen.
Lees artikel → -- index maintenance · bijgewerktIndexOptimize and additions to Ola Hallengren's dbo.CommandLog
Waarom een IndexOptimize-job ineens langer draait — en hoe je met een paar extra kolommen page count, fragmentatie, omvang en duur rechtstreeks uit de ExtendedInfo-XML van dbo.CommandLog haalt. (Engelstalig)
Lees op dbaronald.nl → -- performance tuningExecutieplannen lezen: waar kijk je het eerst naar?
Vijf checks waarmee je in de meeste plannen binnen een paar minuten de boosdoener vindt: dikke pijlen, onverwachte scans, key lookups, cardinality-afwijkingen en warnings.
Lees artikel → -- indexenIndex tuning: clustered, nonclustered en included columns
Hoe je de clustering key kiest, waarom kolomvolgorde alles is, wanneer INCLUDE loont en hoe je ongebruikte indexen opspoort en opruimt.
Lees artikel → -- performance tuningParameter sniffing: als één plan niet voor iedereen past
Waarom een stored procedure ineens traag wordt, hoe je het herkent in Query Store en welke vijf oplossingen wanneer passen.
Lees artikel →