Exekučné plány – kuchárka (začni tu)
Ako čítať exekučný plán SQL Servera od základov: odhadovaný vs. skutočný plán, smer čítania, šípky, percentá, okno Properties, varovania, mapa „vidím X → recept“ a postup pri pomalom dotaze.
Ako čítať exekučný plán SQL Servera od základov: odhadovaný vs. skutočný plán, smer čítania, šípky, percentá, okno Properties, varovania, mapa „vidím X → recept“ a postup pri pomalom dotaze.
Rozcestník diagnostických receptov pre SQL Server 2016+: symptóm → čo spustiť najskôr a čo potom, ako čítať čísla z DMV a komunitné nástroje s autormi.
Deadlocky zo system_health Extended Events a ako v grafe nájsť obeť a príčinu.
Čím sa líši ALTER INDEX REBUILD od REORGANIZE (zámky, log, štatistiky, miesto, prerušenie), kedy ktorý použiť a prečo, čo urobí údržba indexov s veľkou databázou (transaction log, Always On, zálohy, tempdb, blokovanie), online a resumable rebuild, partície, columnstore, rozumné nastavenie IndexOptimize a typické pasce.
Spill do tempdb v pláne: varovanie SpillToTempDb pri Sort a Hash Match, spill level, prečo vzniká (podhodnotený odhad a memory grant) a čo pomôže vrátane memory grant feedback (2017 / 2019 / 2022).
CONVERT_IMPLICIT v pláne: priorita dátových typov, varchar stĺpec a nvarchar parameter, varovanie SeekPlan / CardinalityEstimate, vplyv kolácie a ako typy zosúladiť.
Ako čítať logical reads, physical reads, Scan count, Worktable a CPU vs. elapsed time zo SET STATISTICS IO, TIME a ako nimi overiť, či zmena plánu pomohla.
Ako SQL Server počíta GROUP BY a DISTINCT: Stream Aggregate na zoradenom vstupe vs. Hash Aggregate s memory grantom, Partial Aggregate v paralelnom pláne a Sort pred agregáciou.
Plány zmien dát: Clustered Index Insert / Update / Delete, narrow vs. wide plán, Split / Sort / Collapse, Assert pre CHECK a cudzie kľúče, Halloween protection a triggery.
Nested Loops v pláne: outer vs. inner vstup, Number of Executions, Outer References, odhad na jedno vykonanie, prefetch, row goal a kedy je vnorený cyklus problém.
Memory Grant Info v pláne: Requested, Granted, MaxUsed a GrantWaitTime, varovanie Excessive Grant, vplyv šírky stĺpcov, memory grant feedback a čo robiť pri nadmernom alebo malom grante.
Prečo optimalizátor odhadne 12 riadkov a príde 100 000: štatistiky a histogram, ascending key, lokálne premenné, korelované stĺpce, šírenie chyby v pláne a ako odhad opraviť.
Keď dotaz zrazu spomalí kvôli novému plánu: Query Store a jeho plány v čase, Regressed Queries, vynútenie plánu (sp_query_store_force_plan), automatic plan correction a Query Store hints (2022+).
Merge Join v pláne: prečo potrebuje zoradené vstupy, Sort pred spojením, one-to-many vs. many-to-many (Worktable v tempdb) a kedy je to najlepšie spojenie.
Columnstore Index Scan a batch mode v pláne: Actual Execution Mode, Segments Read / Skipped, predicate a aggregate pushdown, delta store a batch mode on rowstore (2019+).
Chyba 9002 „The transaction log for database is full“: ako zistiť, čo drží log (log_reuse_wait_desc), čo urobiť pri LOG_BACKUP, ACTIVE_TRANSACTION, AVAILABILITY_REPLICA a ďalších dôvodoch, kedy pridať log súbor a kedy (ne)zmenšovať.
Postup pri korupcii databázy: čo nerobiť, ako uložiť výstup, identifikovať objekt a index, kedy stačí rebuild nonclustered indexu, page restore, obnova zo zálohy a prečo je REPAIR_ALLOW_DATA_LOSS až posledná možnosť. Príčina býva v úložisku.
Ako nainštalovať CU na servery v Availability Group s jedným krátkym failoverom: príprava, vypnutie automatického failoveru, poradie replík (async → sync sekundárne → primárna), kontrola synchronizácie, readable secondaries, distribuované AG a návrat späť.
Spracovanie po riadkoch (RBAR) cez kurzor, WHILE cyklus alebo skalárnu funkciu: ako sa prejaví v plánoch a plan cache, prečo je pomalé a ako ho prepísať na set-based príkaz alebo dávky.
Katalóg varovaní v exekučnom pláne: No Join Predicate, Columns With No Statistics, implicitná konverzia, Unmatched Indexes, spill, Excessive Grant a ďalšie – kde ich nájsť a čo s nimi.
Čakania priamo v exekučnom pláne: WaitStats a QueryTimeStats (CPU vs. elapsed) na SELECT, ktoré čakania ukazujú na plán (PAGEIOLATCH, RESOURCE_SEMAPHORE, CXPACKET) a ktoré nie.
Paralelné operátory v pláne: Distribute, Repartition a Gather Streams, Partitioning Type, rozdelenie riadkov po vláknach (skew), exchange spill, NonParallelPlanReason a čakania CXPACKET / CXCONSUMER.
Spool operátory v pláne: eager vs. lazy, rebinds a rewinds, Eager Index Spool ako signál chýbajúceho indexu, Row Count Spool pri NOT EXISTS, Window Spool a Halloween protection.
Malé operátory v pláne: Compute Scalar (výrazy, odložené vyhodnotenie), Filter (neskorý filter, startup predicate), Constant Scan (VALUES, prázdny výsledok) a Concatenation (UNION ALL).
Sort, Distinct Sort, Top a Top N Sort v pláne: blokujúce triedenie, memory grant, šírka stĺpcov, Sort Warning (spill), row goal pri TOP a ako Sort ušetriť indexom.