## Ako zbierku používať
1. V SSMS si over **server a databázu**, proti ktorej máš otvorené okno. `DB_ID()` a `DB_NAME()` vždy odkazujú na aktuálny databázový kontext – recepty nad Query Store, indexmi, štatistikami a právami spúšťaj v cieľovej databáze.
2. Na detaile receptu si prečítaj **Kedy použiť**, **Ako čítať výsledok** a varovanie. Políčka ako `{{DatabaseName}}` vyplníš priamo na stránke a kopíruješ už hotový skript.
3. Jeden výsledok spravidla **nie je dôkaz príčiny**. Porovnaj requesty, čakania, Query Store, OS metriky a aplikačné logy.
4. Pred použitím na PROD skript vyskúšaj na TEST / UAT – najmä tie, ktoré čítajú veľa metadát alebo DBCC.
> [!NOTE]
> Všetky recepty v tejto zbierke iba **čítajú**. Výnimkou je šablóna CHECKDB, ktorá bez prepnutia `@Execute = 1` len vypíše príkaz. Zámerne tu nie je `KILL`, `DBCC FREEPROCCACHE`, `DBCC DROPCLEANBUFFERS`, automatický `DROP INDEX` ani hromadné zmeny práv.
## Prvá pomoc – čo spustiť pri probléme
| Symptóm | Najskôr | Potom |
|---|---|---|
| Aplikácia timeoutuje | [sp_WhoIsActive](script.php?id=10&s=sp-whoisactive-kto-co-prave-robi-na-serveri) | [Detail blockera](script.php?id=14&s=detail-blockera-aj-spiaca-session-s-otvorenou-transakciou), [Otvorené transakcie](script.php?id=15&s=otvorene-transakcie-kto-ich-drzi-a-ako-dlho) |
| Chyba 1205 – deadlock | [Deadlock graph (návod)](script.php?id=7&s=ako-vytiahnut-a-citat-deadlock-graph) | [Deadlocky z event_file](script.php?id=18&s=deadlocky-zo-system-health-event-file-dlhsia-historia) |
| Vysoké CPU | [CPU história – SQL vs. OS](script.php?id=48&s=cpu-historia-za-posledne-4-hodiny-ring-buffer), [Dlho bežiace požiadavky](script.php?id=16&s=dlho-beziace-poziadavky-co-prave-bezi) | [Top dotazy podľa CPU](script.php?id=5&s=top-20-dotazov-podla-cpu), [Query Store – top CPU](script.php?id=25&s=query-store-top-dotazy-podla-cpu) |
| Spomalenie po release | [Query Store – regresie](script.php?id=26&s=query-store-regresie-24-h-vs-predoslych-24-h) | [Štatistiky](script.php?id=29&s=statistiky-posledny-update-a-pocet-zmien), exekučné plány |
| Server na niečo čaká | [Wait stats – rozdiel za N s](script.php?id=49&s=wait-stats-rozdiel-za-n-sekund), [Aktuálne čakania](script.php?id=17&s=aktualne-cakania-na-urovni-taskov) | [Wait stats](script.php?id=6&s=wait-stats-na-co-server-caka) |
| Zapĺňa sa tempdb | [Kto spotrebúva tempdb](script.php?id=20&s=kto-spotrebuva-tempdb) | [Memory grants](script.php?id=19&s=memory-grants-kto-caka-na-pamat-resource-semaphore), [Konfigurácia tempdb](script.php?id=13&s=konfiguracia-tempdb-subory-velkost-autogrowth) |
| Pomalé úložisko / WRITELOG | [I/O latencia](script.php?id=23&s=i-o-latencia-podla-databazovych-suborov) | [Transaction log a VLF](script.php?id=33&s=transaction-log-obsadenie-reuse-wait-a-vlf), perfmon |
| Zapĺňa sa LOG disk / chyba 9002 | [Návod: LOG disk je plný](script.php?id=58&s=log-disk-je-plny-co-robit-krok-za-krokom-chyba-9002), [Transaction log a VLF](script.php?id=33&s=transaction-log-obsadenie-reuse-wait-a-vlf) | [Otvorené transakcie](script.php?id=15&s=otvorene-transakcie-kto-ich-drzi-a-ako-dlho), [Posledné zálohy](script.php?id=3&s=posledne-zalohy-kazdej-databazy) |
| Pripravenosť na obnovu | [Posledné zálohy](script.php?id=3&s=posledne-zalohy-kazdej-databazy) | [História záloh](script.php?id=31&s=historia-zaloh-typ-velkost-kompresia-subor), test RESTORE |
| Kedy dobehne restore / CHECKDB | [Priebeh BACKUP / RESTORE / DBCC](script.php?id=21&s=priebeh-backup-restore-dbcc) | [História záloh](script.php?id=31&s=historia-zaloh-typ-velkost-kompresia-subor) |
| Chyba 823 / 824 / 825 | [Návod: CHECKDB našiel chybu](script.php?id=61&s=checkdb-nasiel-chybu-co-dalej-823-824-825), [Suspect pages](script.php?id=32&s=suspect-pages-evidovane-poskodene-stranky) | [CHECKDB šablóna](script.php?id=34&s=dbcc-checkdb-sablona-s-dry-run) |
| Zlyhal SQL Agent job | [Zlyhané joby](script.php?id=40&s=sql-agent-joby-ktore-naposledy-zlyhali) | [Bežiace joby](script.php?id=41&s=sql-agent-prave-beziace-joby) |
| AG nesynchronizuje | [Always On AG – stav](script.php?id=42&s=always-on-ag-stav-replik-a-synchronizacie) | [Transaction log a VLF](script.php?id=33&s=transaction-log-obsadenie-reuse-wait-a-vlf) |
| Účet A funguje, účet B nie | [Porovnanie rolí dvoch loginov](script.php?id=39&s=porovnanie-db-roli-dvoch-loginov-napriec-databazami) | [Explicitné GRANT / DENY](script.php?id=38&s=explicitne-grant-deny-v-databaze), [Serverové role](script.php?id=35&s=loginy-a-serverove-role) |
| Po restore na iný server | [Orphaned users](script.php?id=37&s=orphaned-users-pouzivatelia-bez-loginu) | [Inventár databáz](script.php?id=12&s=inventar-databaz-recovery-model-compat-level-rcsi) |
| Server je pomalý, príčina nejasná | [Návod: Server je pomalý – prvých 10 minút](script.php?id=59&s=server-je-pomaly-prvych-10-minut) | [Wait stats – rozdiel za N s](script.php?id=49&s=wait-stats-rozdiel-za-n-sekund), [CPU história](script.php?id=48&s=cpu-historia-za-posledne-4-hodiny-ring-buffer) |
| Zmazané dáta / treba obnovu k času | [Návod: Obnova k bodu v čase](script.php?id=60&s=obnova-databazy-k-bodu-v-case-point-in-time-restore) | [Generátor RESTORE príkazov](script.php?id=50&s=generator-restore-prikazov-z-historie-zaloh) |
| tempdb rastie pri RCSI / snapshot | [Version store – kto ho drží](script.php?id=57&s=version-store-kto-ho-drzi) | [Kto spotrebúva tempdb](script.php?id=20&s=kto-spotrebuva-tempdb), [Otvorené transakcie](script.php?id=15&s=otvorene-transakcie-kto-ich-drzi-a-ako-dlho) |
| Čo je v error logu | [Error log s filtrom](script.php?id=52&s=error-log-s-filtrom) | [Suspect pages](script.php?id=32&s=suspect-pages-evidovane-poskodene-stranky) |
| Job zlyhal a nikto o tom nevedel | [Agent joby – harmonogram a notifikácie](script.php?id=55&s=sql-agent-joby-harmonogram-vlastnik-notifikacie) | [Zlyhané joby](script.php?id=40&s=sql-agent-joby-ktore-naposledy-zlyhali) |
| Migrácia na nový server | [Návod: Migrácia – checklist](script.php?id=62&s=migracia-databazy-na-novy-server-checklist) | [Linked servery](script.php?id=56&s=linked-servery-inventar), [Certifikáty a TDE](script.php?id=54&s=certifikaty-a-tde-expiracia-a-zalohy-klucov) |
| CU / patch pri Always On | [Návod: Rolling upgrade CU](script.php?id=63&s=kumulativny-update-cu-pri-always-on-rolling-upgrade) | [Always On AG – stav](script.php?id=42&s=always-on-ag-stav-replik-a-synchronizacie) |
| Bezpečnostný audit servera | [Bezpečnostný baseline](script.php?id=53&s=bezpecnostny-baseline-instancie) | [Certifikáty a TDE](script.php?id=54&s=certifikaty-a-tde-expiracia-a-zalohy-klucov), [Linked servery](script.php?id=56&s=linked-servery-inventar) |
| Plánovanie kapacity disku | [Rast databáz podľa záloh](script.php?id=51&s=rast-databaz-podla-zaloh-12-mesiacov) | [Veľkosť databáz](script.php?id=2&s=velkost-databaz-a-datovych-suborov) |
## Na čo si dať pozor pri čítaní čísel
- `sys.dm_exec_requests`, blokovanie, memory grants a waiting tasks sú **aktuálny stav**, nie história.
- `sys.dm_exec_query_stats`, `sys.dm_exec_procedure_stats`, index usage, wait stats a I/O štatistiky sú **kumulatívne** od štartu, resetu alebo vloženia plánu do cache. Na incident urob dva odbery a porovnaj rozdiel – históriu z nich spätne nevyrobíš.
- **Query Store** má historické intervaly, ale treba poznať jeho stav, retenciu a dĺžku intervalu.
- História záloh v `msdb` je **záznam o zálohe**, nie dôkaz, že sa dá obnoviť. Obnovu pravidelne testuj na izolovanom prostredí.
- Pri incidente si zapisuj časy aj s časovým pásmom – Extended Events používajú **UTC**.
- Read-only neznamená bez dopadu: čítanie fragmentácie, veľkých DMV alebo DBCC vie server poriadne zaťažiť.
## Komunitné nástroje, ktoré netreba prepisovať
Tieto projekty majú vlastných autorov a licencie. Na webe uvádzame odkazy a recepty volaní, kód berieme vždy z originálu.
| Nástroj | Autor | Na čo | Zdroj a licencia |
|---|---|---|---|
| [`sp_WhoIsActive`](script.php?id=10&s=sp-whoisactive-kto-co-prave-robi-na-serveri) | Adam Machanic | aktívne requesty, blokovanie, čakania, transakcie | [GitHub](https://github.com/amachanic/sp_whoisactive) · GPL-3.0 |
| `sp_Blitz`, `sp_BlitzFirst`, `sp_BlitzCache`, `sp_BlitzIndex`, `sp_BlitzLock` | Brent Ozar Unlimited a prispievatelia | health check, výkon v reálnom čase, plány, indexy, deadlocky | [First Responder Kit](https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit) · MIT |
| `DatabaseBackup`, `DatabaseIntegrityCheck`, `IndexOptimize` | Ola Hallengren | zálohy, CHECKDB, údržba indexov a štatistík | [ola.hallengren.com](https://ola.hallengren.com/) · [MIT](https://ola.hallengren.com/license.html) |
Najčastejšie volania (len ak je procedúra nainštalovaná):
```sql
EXEC master.dbo.sp_WhoIsActive @find_block_leaders = 1;
EXEC master.dbo.sp_Blitz @CheckUserDatabaseObjects = 0;
EXEC master.dbo.sp_BlitzFirst @Seconds = 5;
EXEC master.dbo.sp_BlitzCache @SortOrder = 'cpu';
```
## Pred zdieľaním výstupov
Zo screenshotov a príkladov odstráň názvy serverov, fyzické cesty, interné schémy, loginy, SID a text dotazov s osobnými údajmi. Pri incidente si zapíš: server, databázu, prostredie, čas s časovým pásmom, symptóm, spustený dotaz, merané okno, vykonané kroky a výsledok.Prvá pomoc DBA – ktorý skript spustiť pri probléme
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.