Stream Aggregate vs. Hash Aggregate – GROUP BY v pláne
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.
Čerstvo pražené T-SQL skripty a DBA múdrosti – ku každému receptu aj návod, ako ho čítať. Nevieš, čo si dať? Začni Prvou pomocou DBA.
98 receptov · 56 tagov
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.
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+).
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.
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ť.
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ť.
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.
Všetky cesty k plánu: odhadovaný (Ctrl+L, SHOWPLAN_XML, plan cache), skutočný (Ctrl+M, STATISTICS XML), posledný skutočný z cache (2019+), plán bežiaceho dotazu a plány z Query Store.
Kedy je sken celej tabuľky alebo indexu v poriadku a kedy je to problém: Predicate, Number of Rows Read, Ordered, row goal pri TOP a ako sken nahradiť seekom.
Index Seek v pláne: Seek Predicates (Prefix, Start, End) vs. residual Predicate, Number of Rows Read, prefix kľúča indexu a prečo „seek“ ešte neznamená málo práce.
Key Lookup a RID Lookup v pláne: prečo vznikajú, Output List, Number of Executions, bod zlomu medzi lookupom a skenom a ako ich odstrániť pokrývajúcim indexom (INCLUDE).
Hash Match v pláne: build a probe vstup, hash tabuľka v pamäti, memory grant, blokujúca build fáza, Hash Warning (spill), Probe Residual, bitmap a hash agregácia.
Adaptive Join v pláne: tri vstupy, Adaptive Threshold Rows, Estimated vs. Actual Join Type, podmienky (batch mode, compat level 140 / 150, edícia) a ako ho vyskúšať.
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.
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).
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.
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.
ROW_NUMBER, RANK a SUM() OVER v pláne: Sort, Segment, Sequence Project, Window Spool (rámec RANGE na disku vs. ROWS v pamäti), Window Aggregate v batch mode a POC index.
Ako vyzerajú funkcie v pláne: skalárna UDF skrytá v Compute Scalar, sériový plán, scalar UDF inlining v SQL Server 2019+, MSTVF s pevným odhadom, interleaved execution a inline TVF.
Legacy a nový cardinality estimator: ako compat level určuje verziu CE, rozdiely v odhadoch (korelácia, hodnoty mimo histogramu, spojenia), prepínanie hintom a CE feedback (2022+).
Prečo table variable odhaduje 1 riadok, čo zmenila table variable deferred compilation v SQL Server 2019 (compat 150), kedy použiť #temp tabuľku a OPTION (RECOMPILE).
Parameter sniffing v pláne: Parameter Compiled vs. Runtime Value, nerovnomerné dáta, prečo plán „náhodne“ spomalí, RECOMPILE, OPTIMIZE FOR, PSP optimization (2022+) a OPPO (2025).
Prečo index nepomôže, keď je stĺpec vo funkcii, výpočte alebo LIKE s % na začiatku: SARGable vs. non-SARGable podmienky, OR cez rôzne stĺpce, catch-all dotazy a computed column.
Zelený návrh Missing Index v exekučnom pláne: ako vzniká, Impact, poradie stĺpcov, čo návrh nevie (iné indexy, zápisy), kde nájsť ďalšie návrhy a ako ich vyhodnotiť pred vytvorením.
Kedy SQL Server zvolí paralelný plán: cost threshold for parallelism, MAXDOP (server, databáza, hint), NonParallelPlanReason, čakania CXPACKET a CXCONSUMER a DOP feedback v SQL Server 2022.
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.