Když SQL táhne za kratší konec: Jak zkrotit technický dluh
Dluh, který nevidíme, ale platíme Když jsem přebíral firemní DWH na MSSQL, technický dluh byl znát. Noční dávky trvaly celé hodiny a reporty se zpožďovaly do dopoledne. Do optimalizací jsme se proto pustili hned od prvního dne: technický dluh totiž není jen IT problém, ale byznysové riziko s cenovkou v hodinách čekání a ztracených příležitostech.
1. Změřte, než začnete opravovat
Bez čísel je optimalizace střelba potmě. Proto si nejprve nastavte:
- Baseline — log délky běhu klíčových procedur a SSIS balíčků.
- Technické metriky — CPU‑time, I/O wait, tempdb usage.
- Byznysový dopad — kdo čeká na data a kolik hodin zpoždění skutečně stojí.
2. Rychlé výhry: cílená analýza a lokální cache
- Granulární logování — instrumentovali jsme každou proceduru: časujeme vytvoření každé
#temp
tabulky, každý mezivýpočet i blok kódu. - Odhalení úzkého hrdla — analýza ukázala, že ~30 procedur provádí desítky
SELECT
ů přes linked server do těch samých sedmi tabulek. - Inkrementální noční load — tabulky jsme přesunuli do lokální DB (delta‑load); v procedurách se teď dotazujeme přímo na kopie.
- Covering indexy na míru — pro nejčastější dotazy jsme vytvořili cílené covering indexy.
Výsledek? Noční dávka zrychlila o dvě hodiny — zhruba ze 7 na 5 hodin — ještě dřív, než jsme sáhli na složitější refaktor logiky.
3. Když rychlá náplast nestačí: refaktorujte business logiku
Optimalizace není jen o query plánu. Následující zásahy přinesly největší zisky:
- Omezili jsme datový rozsah — mnoho dotazů zbytečně skenovalo celé roky historie. Zpřísnili jsme
WHERE
filtry a pracujeme jen s obdobím, které má pro reporting smysl. - Ranní vs. noční přepočty — v noci (mimo špičku) se tabulky kompletně přepočítají, ráno se zpracuje pouze posledních 6 měsíců. To výrazně snižuje zátěž a zrychluje ETL okno.
- Přepis kurzorů — řádkové smyčky jsme nahradili set‑based CTE a window funkcemi, což zkrátilo běh procedur o desítky procent.
4. Automatizace a kontinuální hlídání. Automatizace a kontinuální hlídání
Technický dluh se vrátí, pokud nemáme guard‑rails:
- CI/CD pro databáze (Azure DevOps, Flyway).
- Výkonové testy v pull requestu — každá změna procedury spustí sadu „zlatých“ dotazů.
- Policy‑Based Management sleduje velikost indexů, fragmentaci a backup lag.
Tím se z jednorázového projektu stává proces; když příští kvartál přibude nový datový zdroj, ETL okno se znovu nerozplizne do rána.
5. Co to celé přineslo?
Ranní reporting teď dorazí ještě před prvním meetingem a odpovědi na ad‑hoc dotazy jsou otázkou minut, ne hodin.
Závěr a výzva k akci
Technický dluh v MSSQL není špinavý kout serverovny, který stačí jednou za rok vyluxovat. Je to živý organismus, který roste s každým hot‑fixem a novým reportem. Trápí vás pomalé dávky nebo zpomalené reporty? Udělejte první krok: změřte realitu a přepočítejte, kolik vás ten dluh stojí.