Blokování SQL Serveru je normálním rysem databázových systémů SQL Server. K blokování dochází, když SQL Server obsluhuje požadavky od více klientů a různé procesy požadují stejné prostředky ve stejnou dobu. Pokud je zdroj používán, je uzamčen a nedostupný pro následující požadavky, takže proces je zpožděn, dokud nebude zdroj uvolněn a znovu dostupný. Bloky SQL Server se normálně vyřeší samy bez znatelného vlivu na výkon. Příležitostně však bloky způsobí snížení výkonu buď proto, že počáteční proces uzamkne zdroj na delší dobu, než jej uvolní, nebo protože počáteční proces zdroj neuvolní vůbec, což způsobí, že zdroje nebudou dostupné, dokud nebude blok vyřešen ručně.
Když je sada prostředků zablokována na významnou dobu, kvalita výkonu se sníží do té míry, že uživatelé systému začnou zaznamenávat problémy. Tyto problémy zahrnují věci, jako jsou dotazy, které se spouštějí dlouho nebo vyprší časový limit, nebo uživatelé nemohou uložit obrazovky, které upravili.
Jak opravit bloky serveru SQL
Krátkodobým řešením blokování SQL Serveru je identifikovat a ručně odblokovat transakci, když si všimnete, že výkon je negativně ovlivněn blokem nebo bloky.
Jakmile potvrdíte přítomnost bloku serveru SQL, zkontrolujte monitor aktivity serveru SQL a zrušte dotazy, které způsobují největší potíže. Můžete také použít skripty SQL k nepřetržitému sledování stavu uzamčení a blokování na serveru SQL Server. Brent Ozar navrhuje přidat některé čítače výkonu specifické pro blokování, aby vás SQL Server upozornil, když překročíte stanovené limity blokování.
Jak zabránit blokování serveru SQL
Pro správce databáze je užitečné vědět, jak opravit blok SQL Server. Ale v zájmu udržení vysoce výkonného systému je ještě lepší vědět, jak zabránit – nebo alespoň minimalizovat – výskytu blokování. Zde jsou čtyři tipy, jak minimalizovat některé běžné typy blokování serveru SQL:
1. Použijte indexy
Použití seskupených indexů v tabulkách s vysokým využitím pomáhá omezit blokování tím, že vyzve optimalizátor dotazů, aby místo prohledávání indexu spustil hledání indexu. Když je uzamčen pouze aktualizovaný záznam, následné procesy mohou zámek obejít a mohou být dokončeny.
Je také důležité se ujistit, že příkazy UPDATE a DELETE používají indexy. Indexy pomáhají příkazům UPDATE a DELETE snížit počet modifikačních zámků, které získávají pomocí neclusterových indexů nebo indexových rad k odstranění zámků.
2. Vyčistěte své dotazy
Jedním z nejlepších postupů, jak se vyhnout blokům serveru SQL Server, je rozdělit dlouhé transakce na více kratších transakcí. Dlouhotrvající dotazy drží zámek po dobu trvání transakce, takže zdroj není dostupný pro ostatní procesy. Rozdělení dlouhých transakcí na krátké udržuje data v pohybu.
Zvažte použití ladění SQL Server, aby byly dotazy co nejúčinnější. Dobrý optimalizátor dotazů bude zapisovat a přepisovat dotazy, dokud nebudou nakonfigurovány tak, aby snížily počet bloků, které mohou zpomalit výkon.
3. Identifikujte hlavní příčinu blokování serveru SQL Server
Sledování metrik výkonu v průběhu času je skvělý způsob, jak se vyhnout blokování serveru SQL. Zjištěním toho, které relace jsou často blokovány a jaké příkazy se týkají, můžete určit postup k odstranění hlavních příčin opakujících se blokování pomocí indexování, optimalizace dotazů nebo jinými prostředky.
Dalším místem, kde hledat hlavní příčinu blokování, je zátěž systému. Spusťte analýzu zátěže, abyste zjistili, zda došlo ke zvýšení. Příliš velká zátěž způsobí zablokování serveru SQL Server, protože se hromadí rostoucí počet dotazů čekajících na přístup k uzamčeným prostředkům. Možná budete muset přidat indexy nebo rozdělit pracovní zátěž do více databází, abyste vyřešili problémy s výkonem velké zátěže.
4. Udržujte své statistiky aktuální
Zastaralé statistiky mohou spustit neefektivní plány dotazů, protože plán nebyl aktualizován, aby zohlednil změny. SQL Server spustí vyhledávací procházení, aby nalezl přesunutá nebo chybějící data, což zase vytvoří bloky.
Nejúčinnějším způsobem, jak udržovat statistiky aktuální, je automatizovat co nejvíce aktualizací. Pokud nemůžete naplánovat automatické aktualizace, nezapomeňte do kontrolního seznamu plánované údržby přidat ruční aktualizace, abyste zajistili pravidelné provádění aktualizací.
Blokování SQL Serveru může být součástí života DBA, ale existují způsoby, jak zmírnit jeho dopad na výkon vaší databáze SQL Server. Přerušte cyklus blokování a odblokování implementací některých výše uvedených strategií. S trochou plánování, optimalizace a automatizace je možné omezit výskyt blokování SQL Serveru – a za určitých okolností jej zcela vymýtit.