Miloslav Peterka, BI Experts, s.r.o.
Agenda Správa databázových souborů Indexy – správa a optimalizace Databáze tempdb Monitorování a optimalizace (Konfigurace instance a databáze)
Databáze a jejich soubory Databáze Kolekce objektů pro ukládání a manipulaci s daty Každá obsahuje minimálně dva soubory Primární datový soubor (.mdf) Transakční log (.ldf) Volitelně sekundární datové soubory (*.ndf), případně další transakční logy
Struktura datových souborů Datová stránka (data page - 8kB) nejmenší jednotka pro IO operace V rámci souboru číslovány od 0 Blok (extent - 64kB) Kolekce osmi datových stránek Používají se pro alokaci prostoru Dva typy ○ uniformní – náleží jednomu objektu ○ smíšené – sdílené mezi více objektů (po stránkách)
Stránky v datovém souboru File Header obsahuje atributy souboru Bulk Changed Map mapa bloků změněných od poslední zálohy logu bulk logged operacemi pro zálohování logu v bulk logged recovery módu Differential Changed Map mapa změněných bloků od poslední plné zálohy pro rozdílovou zálohu
Alokace prostoru Malé tabulky (menší než 8 stránek) jsou umístěné ve sdílených blocích, větší v uniformních GAM (Global Allocation Map) bitová mapa určující nealokované extenty pokrývá prostor cca 4GB SGAM (Shared GAM) bitová mapa určující smíšené bloky s volnou stránkou
Filegroup Pojmenovaná skupina datových souborů Definuje diskový prostor pro uložení tabulek a indexů PRIMARY filegroup obsahuje vždy alespoň primární datový soubor Umožňují zálohovat a obnovovat databázi po částech využívat table a index partitioning Filestream Filegroup
BP pro datové soubory Nepoužívat Autogrow a Autoshrink Datová soubory alokovat pro finální velikost databáze Fyzicky oddělit datové soubory od transakčních logů (RAID10) Více datových souborů na jednom disku Možná obnova na menší disky Připraveno pro přenos na více disků
Transakční log Fyzický soubor(y) na disku Zaznamenává změny prováděné v databázi a informace o použitých zámcích Umožňuje Zotavení databáze po havárii ○ Restart a Restore recovery Rollback transakcí Používá write-ahead zápis
Transakční log Recovery model databáze určuje kolik informací se do logu píše jak dlouho v logu informace zůstávají Aktivní část logu Část potřebná ke zotavení databáze Dána začátkem nejstarší nedokončené (nevyreplikované) transakce Nelze ji z logu vyprázdnit
Virtual Log File (VLF) Jednotka pro interní správu transakčního logu Počet VLF dán počáteční velikostí logu a velikostí inkrementálních přírůstků LSN – Log Sequence Number Číslo přiřazené každému záznamu v logu
BP pro transakční logy Dedikovaný disk Pouze jeden pro jednu databázi RAID konfigurace (1 vs 10) Prealokovaná velikost, vodítko: 10 – 25% velikosti DB AutoGrow s rozumnou velikostí Interní defragmentace (+ fyzická )
Interní fragmentace logu Log členěn na VLF VLF přidány při zvětšení logu <= 64MB – 4 VLF > 64MB a < 1GB – 8 VLF > 1GB – 16 VLF Počáteční velikost logu ne větší než 8GB (generuje VLF o velikosti 500MB) Rozumný počet VLF: < 50
Interní defragmentace logu 1. Vyprázdnit log (backup nebo checkpoint) 2. Zmenšit log na minimum (shrink) 3. Prealokovat odpovídající délku 4. Nastavit odpovídající přírůstek
Demo Obsah a struktura transakčního logu Interní fragmentace logu
Agenda Správa databázových souborů Indexy – správa a optimalizace Databáze tempdb Monitorování a optimalizace (Konfigurace instance a databáze)
Organizace dat v tabulce sys.indexes sys.partitions sys.allocation_units
Heap Tabulka bez klastrovaného indexu Pořadí záznamů není dáno Řádek se vloží tam, kde je místo dle IAM a PFS
Indexy Zrychlují vyhledávání dat Zpomalují modifikace v datech Jsou organizované jako stromové struktury Kořenová úroveň obsahuje jednu stránku - root Každá další úroveň má větší počet stránek Nejnižší úroveň označovaná jako listová Dva typy – klastrované a neklastrované
Klastrované indexy Listová úroveň obsahuje datové stránky Definuje pořadí řádků a stránek Pro každou tabulku možný jen jeden
Neklastrované indexy Stejná struktura jako u klastrovaných indexů Rozdíl je v listové úrovni Obsahuje ○ indexový klíč, případně vložené sloupce ○ ukazatel na celý řádek RID, pokud je tabulka na heapu klastrovaný klíč, pokud má tabulka klastrovaný index Neovlivňují vlastní tabulku
Demo Organizace dat v tabulce Heap Neklastrovaný index Klastrovaný index
Fragmentace indexů - dělení stránek Pozice nového záznamu dána hodnotou indexového klíče Pokud není na dané stránce dostatek místa: Alokuje se nová stránka (fyzicky na jiném místě) Nová stránka se včlení do seznamu a polovina záznamů z původní stránky se přesune na novou Nový záznam se vloží na místo dané indexovým klíčem
Fyzická fragmentace (interní) Způsobená nezaplněnými stránkami indexu Vzniká: dělením stránek mazáním záznamů nevyužitím místa v důsledku velikosti záznamů Větší diskový prostor, více IO operací, větší nároky na velikost paměti
Logická fragmentace (externí) Logické a fyzické pořadí stránek (bloků) se liší Vzniká dělením stránek Snižuje efektivitu skenování indexů
Detekce fragmentace Index Physical Statistics report v SSMS zobrazuje fragmentaci indexů doporučuje způsob odstranění fragmentace Okno vlastností indexu sys.dm_db_index_physical_stats Funkce vracející tabulku Vrací informace o struktuře tabulek a indexů a jejich „kondici“
sys.dm_db_index_physical_stats Pět parametrů s defaultními hodnotami: database_id, object_id, index_id partition_number mode ○ LIMITED – sken první nelistové úrovně indexu ○ SAMPLED – skenuje 1% všech stránek ○ DETAILED – skenuje vše, poskytuje informace o všech úrovních indexu
Demo Detekce fragmentace Vliv fragmentace na IO operace
Odstranění fragmentace ALTER INDEX.... REORGANIZE pokud je fragmentace menší než 30% online operace ALTER INDEX..... REBUILD při fragmentaci větší než 30% v Enterprise edici možné provádět online V rámci plánu údržby databáze (SSIS)
Demo Odstranění fragmentace
Prevence fragmentace Vhodná volba klastrovaného indexu Unikátní ○ Pokud není, zajištěno interně přidáním 4B čísla Co nejmenší ○ Klastrovaný klíč součástí všech neklastrovaných indexů Neměnné rostoucí hodnoty ○ Zamezuje zbytečné fragmentaci Vhodný typ int s volbou identity
Prevence fragmentace Vhodnou volbou FILLFACTORu Definuje zaplnění listové úrovně indexu Odkládá nutnost dělení stránek Příliš nízká hodnota degraduje výkon při čtení ○ počet operací čtení typicky dvakrát více než zápisu PADINDEX Aplikuje FILLFACTOR i na nelistové úrovně
Demo Vliv volby FILLFACTOR na fragmentaci indexu
Agenda Správa databázových souborů Indexy – správa a optimalizace Databáze tempdb Monitorování a optimalizace (Konfigurace instance a databáze)
Specifika tempdb Jedna pro celou instanci Globální zdroj dostupný všem uživatelům Vytvářena při každém startu SQL Serveru Transakce v tempdb nejsou trvanlivé Díky tomu rychlejší Chybí REDO fáze Není nutný flush při COMMITu transakce
Omezení tempdb Nelze ji smazat ani přejmenovat Nedá se zálohovat Pouze jedna filegrupa Některé vlastnosti nelze měnit RECOVERY model Dostupnost, šifrování AUTO_SHRINK, AUTO_CLOSE
Využití tempdb v SQL Serveru Dotazy a DML operace alokují prostor v tempdb Uživatelské objekty Interní objekty Version store
Uživatelské objekty Viditelné v kat. pohledech (sys.all_objects) Uživatelské tabulky a indexy vytvořené v tempdb Systémové tabulky a indexy Dočasné tabulky a indexy (#tbl, ##tbl) Proměnné typu table Tabulky vracené z TVF
Interní objekty Vytvářené interně SQL Serverem Velikost minimálně 9 stránek (IAM + 8 na data) Skryté objekty, nejsou vidět v kat. pohledech Mezivýsledky třídění, hash joinů a agregací, kurzory LOB proměnné (xml, varchar(max),...) Vytváření indexů s volbou SORT_IN_TEMPDB Service Broker (event notification, database mail,...)
Version store Úložiště verzí řádků pro zajištění specifické funkčnosti SQL Serveru Dvě odlišná úložiště: common version store pro ○ Snapshot izolaci transakcí ○ MARS ○ Triggery online-index-build version store
Demo Využití tempdb
Monitorování prostoru v tempdb sys.dm_db_file_space_usage Vrací počet stránek alokovaných v tempdb pro jednotlivé typy úložišť Vysoké % prostoru alokovaného pro interní objekty může signalizovat nevhodné exekuční plány Vysoké % prostoru alokovaného pro version store signalizuje dlouho trvající transakci ○ sys.dm_tran_active_snapshot_database_transactio ns umožňuje detekovat dlouho běžící snapshot transakce
Monitorování prostoru v tempdb sys.dm_db_session_space_usage Vrací počet stránek alokovaných a dealokovaných v tempdb pro jednotlivá připojení od jejich začátku sys.dm_db_task_space_usage Vrací počet stránek alokovaných a dealokovaných v tempdb na úrovni jednotlivých tasků Lze kombinovat s sys.dm_exec_requests pro získání dotazu či exekučního plánu
Demo Monitorování prostoru v tempdb
Best practices pro tempdb Separace od ostatních databází rychlý IO subsystém Rozdělení na více datových souborů Stejná velikost Počet dle počtu CPU jako vodítko Typické optimum mezi 4 a 8 datovými soubory Snižuje soupeření o alokační stránky (UP latch)
Best practices pro tempdb Předalokování velikosti na velikost odpovídající typické zátěži Povolit Autogrow (pouze „pro sicher“) Používat Instant File Initialization Zrychluje alokaci diskového prostoru pro databáze Nepřepisuje nové místo nulami Vyžaduje právo SE_MANAGE_VOLUME_NAME pro účet SQL Serveru
Agenda Správa databázových souborů Indexy – správa a optimalizace Databáze tempdb Monitorování a optimalizace (Konfigurace instance a databáze)
Metodika Waits and Queues Waits SQL Server potřebuje systémové zdroje pro zpracování dotazů Pokud nejsou dostupné, musí na ně čekat Délku čekání na jednotlivé typy zdrojů eviduje ve statistikách Typy čekání identifikují a kategorizují čekání uživatele (aplikace) 48
Metodika Waits and Queues Queues Měří systémové zdroje a jejich využití Reprezentovány objekty a čítači v Performance Monitoru Korelace Wait statistik a Queues umožňuje identifikovat problémové oblasti a úzká hrdla 49
Zpracování úloh v SQL Serveru Scheduler Rozděluje práci CPU (jeden scheduler na jedno CPU) Pracuje kooperativně ○ Probíhající úloha dobrovolně uvolní CPU ostatním Worker Thread svázaný s daným schedulerem Vykonává jednu úlohu (task) 50
Zpracování úloh v SQL Serveru Tři stavy zpracování úlohy Running ○ Zpracovává se - pouze jedna úloha pro daný scheduler Runnable ○ Čeká na přidělení CPU Suspended ○ Čeká na dostupnost požadovaných zdrojů 51
Waiting tasks (Resource Waits) SPID 73 LCK_M_S SPID 59 NETWORKIO SPID 55 LOGMGR SPID 60 IO_COMPLETION Waiting tasks (Resource Waits) SPID 73 LCK_M_S SPID 59 NETWORKIO SPID 56 CXPACKET SPID 55 LOGMGR SPID 60 IO_COMPLETION Running SPID 51 Running Running SPID 60 IO_COMPLETION Running SPID 60 Running Zpracování úloh v SQL Serveru 52 Runnable queue (Signal Wait) SPID 51 Runnable SPID 64 Runnable SPID 87 Runnable SPID 52 Runnable SPID 93 Runnable SPID 56 Runnable
Monitorování - Queues Objekty a čítače Performance monitoru CPU Memory IO subsystém Network 53
Monitorování - Waits DM pohledy SQL Serveru sys.dm_wait_stats ○ statistiky čekání SQL Serveru sys.dm_os_waiting_tasks ○ Informace o úlohách v čekající frontě 54
Demo Queues – Performance Monitor Waits – dm pohledy v SQL Serveru 55
Vyhodnocení Management Data Warehouse Pouze od verze 2008 nahoru Od Workgroup edice (single instance) Problematická analýza a rozšiřitelnost Nástroje třetích stran (Quest, Idera…) Dobré nástroje velmi drahé DW/BI řešení 56
DW/BI řešení OLTP databáze pro sběr výkonnostních charakteristik Dimenzionální DW Datová kostka pro ad-hoc analýzu 57
Demo DW/BI řešení Sběr dat Datový sklad Datová kostka 58
Agenda Správa databázových souborů Indexy – správa a optimalizace Databáze tempdb Monitorování a optimalizace (Konfigurace instance a databáze)