MS SQL Server stojc bdc Miloslav Peterka BI
MS SQL Server stojící, bdící Miloslav Peterka, BI Experts, s. r. o. MCSE: Data Platform | Business Intelligence | Data Management and Analytics miloslav. peterka@biexperts. cz
Osnova 1. Úvod do problematiky 2. SQLOS a zpracování úloh v SQL Serveru 3. Katalogové pohledy 4. Běžné prostoje 1. IO 2. CPU 3. Ostatní 5. Závěrem
Úvod do problematiky § MS SQL Server Database Engine − Serverová služba − Řeší požadavky (úlohy) klientů (aplikací) Typicky velké množství současně § Řešená úloha zatěžuje CPU § Současně zpracovávané požadavky soupeří o omezené zdroje − Pokud úloze chybí potřebné zdroje, požadavek čeká na zpracování Projevuje se jako výkonnostní problém § SQL Server zaznamenává informace o délce čekání a jeho příčinách
SQLOS a zpracování úloh v SQL Serveru § Session − Vytvářená pro autentizované připojení − Identifikovaná unikátním session_id (SPID) § Request − Požadavek zaslaný v rámci session aplikací (uživatelem) § Scheduler − Rozděluje práci CPU (jeden scheduler na jedno CPU) − Pracuje kooperativně Probíhající úloha dobrovolně uvolní CPU ostatním
SQLOS a zpracování úloh v SQL Serveru § Worker − Thread svázaný s daným schedulerem − Vykonává jednu úlohu (task) § CPU time využitý workerem omezen − Na dobu, dokud není požadován nedostupný zdroj nebo − Dokud není vyčerpáno quantum Pak se worker dobrovolně vzdá CPU ve prospěch jiné úlohy § Pokud worker nepracuje a čeká na na dostupnost zdroje, vzniká prostoj - wait
SQLOS a zpracování úloh v SQL Serveru Running SPID 60 51 Running IO_COMPLETION Runnable queue (Signal Wait) SPID 51 Runnable SPID 64 Runnable SPID 87 Runnable SPID 52 Runnable SPID 93 Runnable SPID 56 Runnable Waiting tasks (Resource Waits) SPID 73 LCK_M_S SPID 59 NETWORKIO SPID 56 CXPACKET SPID 55 LOGMGR SPID 60 IO_COMPLETION 6
Katalogové pohledy s informacemi o „waitech“ § sys. dm_os_waiting_tasks • Pohled na čekající úlohy • Vhodný pro zkoumání aktuálních výkonnostních potíží § sys. dm_os_wait_stats • Obsahuje celkové kumulované časy prostojů vlastní prostoj plus signal wait time • Vyprázdněn restartem služby nebo smazáním statistik (DBCC SQLPERF)
Demo § SQLOS objekty § Katalogové pohledy
Co je dobré vědět § Bez prostojů to nejde § Řada prostojů se dá ignorovat § Samotné vyhodnocení prostojů nestačí • Třeba korelovat s jinými informacemi Performance monitor Katalogové pohledy SQL Serveru – Statistiky indexů, virtuálních souborů, latch, spinlocks, … § Je vhodné vytvořit baseline, ke které lze vztahovat následná měření § Existující nástroje mohou výrazně pomoci
Běžné prostoje - IO § PAGEIOLATCH_XX • Nastává, pokud úloha požaduje datovou stránku, která není v paměti • Je alokována stránka v paměťovém bufferu, na které se drží latch, dokud není stránka načtena z disku • SH pro čtení, EX pro zápis • Možné příčiny Špatné dotazy (často s vysokým CXPACKET díky paralelním skenům) Nedostatek paměti Nedostatečná propustnost IO subsystému • Vhodné korelovat s sys. dm_io_virtual_file_stats a čítači objektu Physical. Disk
Běžné prostoje - IO § WRITELOG • SQL Server zapisuje při potvrzení transakce log záznamy z paměti na disk • WRITELOG reprezentuje čekání na zápis dat do transakčního logu Operace synchronní s potvrzením transakce • Typicky vzniká při uložení transakčních logů z více intenzivně využívaných databází na jednom disku • Zbytečné zápisy generuje například Údržba nevyužitých neklastrovaných indexů Nadměrný rebuild indexů Konstantní dělení stránek
Běžné prostoje - IO § IO_COMPLETION a ASYNC_IO_COMPLETION • Prostoj generován synchronními IO operacemi, které nepracují s tabulkami (buffer poolem), například: Čtení logu při zotavení Čtení alokačních bitmap Zápis mezivýsledků třídění, merge joinů Checkpoint na začátku zálohování Čtení ze zálohy během zálohování
Běžné prostoje - CPU § CXPACKET • Vzniká při synchronizaci paralelních exekučních plánů • Často představuje důsledek, nikoli příčinu • Snížení možné Zvýšením prahu pro paralelní plány Snížením míry paralelismu Odstraněním skutečné příčiny blokující paralelní úlohu (IO, statistiky, …) • Nový CXCONSUMER odlišuje nepodstatné • Paralelismus problémem, pokud s CXPACKED dominují LATCH_EX (ACCESS_METHODS_DATASET_PARENT) SOS_SCHEDULER_YIELD
Běžné prostoje - CPU § SOS_SCHEDULER_YIELD • • Vzniká v důsledku kooperativního multitaskingu v SQLOS Task, který vyčerpá quantum, generuje SOS_SCHEDULER_YIELD Často indikátor rozsáhlých skenů Pokud se nevyskytuje současně s prostoji PAGEIOLATCH_*, ukazuje na nedostatečný výpočetní výkon § Úzké hrdlo na straně CPU se dále typicky projevuje • Velkým počtem úloh v runnable frontě • Vysokým podílem signal_wait_time
Běžné prostoje - ostatní § LCK_M_XX • Čekání na uvalení zámku typu XX § LATCH_XX • Čekání na uvalení latche mimo buffer pool, detaily v sys. dm_os_latch_stats § BACKUPIO • Prostoj při čtení a zápisu z/do záložního souboru § ASYNC_NETWORK_IO • SQL Server čeká na zpracování dat na straně klienta
Závěrem § Analýza prostojů je dobrým výchozím bodem k detekci příčin výkonnostních problémů § Pro potvrzení podezření je třeba korelovat s dalšími informacemi § Ne vše ale měří • Propustnost RAM
Děkuji za pozornost Miloslav Peterka, BI Experts, s. r. o. MCSE: Data Platform | Business Intelligence | Data Management and Analytics miloslav. peterka@biexperts. cz
- Slides: 17