Řešení blokující problémy, které jsou způsobeny stupňování zablokování na serveru SQL Server

Překlady článku Překlady článku
ID článku: 323630 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Stupňování zablokování je proces převodu mnoho uzamykání zámků (například uzamčení řádků nebo stránek) do tabulky zámků. Microsoft SQL Server dynamicky rozhoduje, kdy provést stupňování zablokování. Při vytváření tohoto rozhodnutí, SQL Server bere v úvahu počet zámků, které jsou drženy na zejména scan, počet zámků, které jsou v držení celá transakce a paměti, který je používán pro uzamčení v systému jako celku. Obvykle výsledkem vyskytující vedoucím Zamknout výchozí chování serveru SQL Server pouze v těchto bodech, kde zvýšení výkonu nebo kdy je třeba snížit nadměrné systémová paměť zamknout více přiměřenou úroveň. Však některé návrhy aplikace nebo dotazu může spustit stupňování zablokování v době, kdy je není žádoucí a zámek escalated tabulky může ostatním uživatelům zablokovat. V tomto článku Popisuje, jak lze zjistit, zda stupňování zablokování způsobuje zablokování a jak vypořádat se s vedoucím nežádoucímu uzamčení.

Další informace

Jak lze zjistit, zda stupňování zablokování způsobuje zablokování

Stupňování zablokování nezpůsobuje většina blokující problémy. K Zjistěte, zda stupňování zablokování dochází v době když jste Blokující problémy, spustit trasování SQL Profiler, který zahrnuje Stupňování zablokování: událost. Pokud se nezobrazí žádné Stupňování zablokování: události, stupňování zablokování nedochází na serveru a informace v tomto článku se nevztahuje na vaši situaci.

Pokud stupňování zablokování dochází, ověřte, že blokuje zámek escalated tabulky ostatní uživatelé.

Další informace o určení hlavy blokování automaticky otevíraných oken a jak k identifikaci uzamčení prostředku držení hlavy blokování automaticky otevíraných oken, blokuje ostatní proces serveru ID identifikátory (SPID), klepněte na následující číslo článku databáze Microsoft Knowledge Base:
224453Vysvětlení a řešení SQL Server 7.0 nebo 2000 blokující problémy
Pokud je zámek, který brání ostatním uživatelům cokoli jiného než zámek KARTU (na úrovni tabulky) s uzamknout režim S (sdílená), nebo X (výhradní) stupňování zablokování není problém. Zejména je-li na KARTU zamknout je záměru lock (jako je například režim uzamčení je IU a IX), není Výsledek uzamčení vedoucím. Pokud nejsou způsobeny blokující problémy Uzamknout vedoucím, naleznete v článku Q224453 potíží.

Jak zabránit stupňování zablokování

Nejjednodušší a nejbezpečnější způsob, jak zabránit stupňování zablokování je zachovat transakce, které jsou krátké a snížit tak půdorys zámku nákladné dotazů nejsou překročeny prahové hodnoty uzamčení vedoucím. Existuje několik způsobů, jak získání tohoto cíle, z nichž mnohé jsou uvedeny:
  • Rozdělit velké dávkové operace do několika menších operace. Například Předpokládejme, že jste spustili následujícího dotazu odebrat několik set tisíc staré záznamy z tabulky aplikace auditu a pak zjištěno, že příčin vedoucím zámek, který jiným uživatelům zablokován:
    DELETE FROM LogMessages WHERE LogDate < '2/1/2002'						
    Odebráním těchto záznamů, několik set najednou, můžete výrazně Snižte počet zámků, které shromažďují na transakci a zabránit uzamčení vedoucím. Například:
    SET ROWCOUNT 500
    delete_more:
         DELETE FROM LogMessages WHERE LogDate < '2/1/2002'
    IF @@ROWCOUNT > 0 GOTO delete_more
    SET ROWCOUNT 0
  • Snížit tím, že dotaz jako půdorys zámku dotazu co nejúčinnější. Velké prohledávání nebo velkého počtu Záložka vyhledávání může zvyšuje stupňování zablokování; Navíc zvyšuje pravděpodobnost zablokování a obecně nepříznivě ovlivňuje souběžnost a výkonu. Po nalezení dotaz, který způsobuje stupňování zablokování, hledání příležitosti Vytvoření nových rejstříků nebo přidat do existující index odstranit index sloupce nebo prohledávání tabulky a maximalizovat účinnost index usiluje. Zvažte možnost vkládání dotaz do okna dotazu Query Analyzer provést analýzu automatické index na něj. Postup na Dotaz nabídky, klepněte na tlačítko Průvodce optimalizací index v serveru SQL Server 2000 nebo klepněte na tlačítko Provedení analýzy indexu na serveru SQL Server 7.0.

    Jedním cílem této optimalizace Zkontrolujte index usiluje vrátit jako několik řádků co nejvíce minimalizovat náklady Záložka vyhledávání (maximalizovat selektivita indexu pro zvláštní dotaz). Pokud je SQL Server odhadne, že vyhledávání Záložka logický operátor může Vrátí počet řádků předběžného NAČTENÍ může použít při vyhledávání záložky. Pokud SQL Server předběžného NAČTENÍ pro vyhledávání záložky, je nutné zvětšit čtení část Dotaz na opakovatelné úroveň izolace transakcí pro část dotazu. To znamená, že co může vypadat SELECT prohlášení potvrzené čtení izolace na úrovni mohou získat několik tisíc klíč uzamčení (seskupený index i jeden neseskupené index), které mohou způsobit takový dotaz k překročení prahové hodnoty uzamčení vedoucím. To je zejména Důležité Pokud zjistíte, že je escalated zámek zámek sdílené tabulky, které však se nezobrazuje běžně na výchozí úroveň izolace čtení potvrzena. Pokud Záložka vyhledávání pomocí předběžného NAČTENÍ klauzule způsobuje zvýšení, zvažte Přidání dalších sloupců pojmenovaný index, který se zobrazí v rejstříku Hledání nebo logický operátor pod logické Záložka vyhledávací Index prohledávání operátor v plánu dotazu. Je možné vytvořit index zahrnující (an index, který zahrnuje všechny sloupce v tabulce, které byly použity v dotazu), nebo nejnižší index, který zahrnuje sloupce, které byly použity pro kritéria spojení nebo v je klauzule WHERE, pokud včetně vše v seznamu vybrat sloupec nepraktické.

    Vnořené smyčky spojení může také pomocí předběžného NAČTENÍ a způsobí, že uzamčení stejné chování.

    Další informace získáte klepnutím na následující číslo článku databáze Microsoft Knowledge Base:
    260652Vnořené smyčky spojení, které používá "ZÁLOŽKA vyhledávání...Může se předběžné" Držte delší zámky
  • Stupňování zablokování nemůže dojít, pokud různé SPID aktuálně hospodářství s nekompatibilní tabulky zámkem. Vždy uzamknout vedoucím escalates Zámek tabulky a nikdy uzamčení stránky. Navíc pokud stupňování zablokování Pokus se nezdaří, protože obsahuje jiné číslo SPID nekompatibilní zamknout KARTU, dotaz Tento pokus o vedoucím neblokuje při čekání na KARTU zámek. Místo toho pokračuje k získání uzamčení na úrovni jeho původní, přesnější (řádek, klíče, nebo stránka), pravidelně provádět další Eskalace pokusy. Proto jeden Metoda zabránit stupňování zablokování na určitou tabulku je získání a Podržte zámku na jiné připojení, který není kompatibilní s escalated Typ zámku. Žádné nezamyká s zámkem IX (záměr výhradní) na úrovni tabulky řádky nebo stránky, ale je stále není kompatibilní s escalated S (sdílená) nebo x (výhradní) Zamknout KARTU. Předpokládejme například, musíte spustit dávkovou úlohu upraví velký počet řádků v Tabulka Tabulka a který způsobil blokování, ke kterému dochází z důvodu uzamčení vedoucím. Jestliže je vždy menší než za jednu hodinu dokončení této úlohy, můžete vytvořit úlohy Transact-SQL, která obsahuje následující kód a naplánovat novou úlohu spustit několik minut před časem zahájení dávkové úlohy:
    BEGIN TRAN
    SELECT * FROM mytable (UPDLOCK, HOLDLOCK) WHERE 1=0
    WAITFOR DELAY '1:00:00'
    COMMIT TRAN				
    Tento dotaz získá a drží zámek IX Tabulka jednu hodinu, který brání stupňování zablokování v tabulce během Tento čas. Této dávkové úpravy dat ani blokovat jiné dotazy (Pokud Další dotaz vynutí uzamčení tabulky s TABLOCK nápovědy nebo pokud Správce zakázal uzamčení řádku nebo stránky pomocí sp_indexoption uložená procedura).
Navíc lze zakázat stupňování zablokování povolení trasování Příznak 1211. Avšak tento příznak trasování zakáže globálně ve všech stupňování zablokování instance serveru SQL Server. Stupňování zablokování slouží účelu velmi užitečné v SQL Server maximalizuje účinnost dotazů, které jsou jinak zpomalil podle režijní náklady na získání nebo uvolnění uzamčení několik tisíc. Zámek vedoucím také pomáhá minimalizovat požadované paměti ke sledování zámky. Je paměť, která serveru SQL Server můžete dynamicky přidělit pro uzamčení struktury finite, takže pokud zakážete stupňování zablokování a zamknout paměť roste velké dostatek, pokusí přidělit další zámky pro libovolný dotaz může selhat a dojde k následující chybě:

Chyba: 1204, závažnosti: 19, Stav: 1
SQL Server nelze získat ZÁMEK prostředku v tomto okamžiku. Znovu spustit příkaz při méně aktivních uživatelů nebo systém Zkontrolujte konfiguraci zámku a paměti serveru SQL Server pomocí správce.
Poznámka: Dojde-li k "1204" chyby, zastaví zpracování aktuální příkaz a způsobí vrácení zpět aktivní transakce. Vrácení změn sám může blokovat uživatele nebo vést k obnovení čas dlouhý databáze, pokud restartování Služba SQL Server.

Použití Tip zámku, například uzamknout řádky pouze změní plán úvodní uzamčení. Zámek tipy nebrání stupňování zablokování.

Jiné metody prevence stupňování zablokování které jsou uvedeny starší tohoto článku jsou vhodnější možnosti, než povolíte Příznak trasování. Navíc ostatní metody obvykle vytvářejí lepší výkon pro dotaz než zákaz stupňování zablokování pro celé instance. Společnost Microsoft doporučuje povolení tohoto příznaku trasování pouze pro zmírnění závažné blokování, které je způsobeno stupňování zablokování při další možnosti, jako jsou například zmíněných dříve v tomto článku, jsou vyšetřovaných. Povolit trasování Příznak tak, aby se na vždy, když je spuštěn SQL Server, přidejte jej jako server spouštěcí parametr.

Chcete-li přidat parametr spuštění serveru, klepněte pravým tlačítkem myši Server v nástroji SQL Enterprise Manager klepněte na tlačítko Vlastnostia potom v Obecné karta, klepněte na tlačítko Parametry pro spuštěnía potom přidejte následující parametr (přesně uvedeno):
-T1211
Musí cyklu pro nový parametr spuštění služby SQL Server se projeví. Pokud spustíte následující dotaz v Query Analyzer příznak trasování se projeví okamžitě:
DBCC TRACEON (1211, -1)				
Avšak pokud nepřidáte -T1211 spouštěcí parametr, vliv traceon příkaz je ztracena je čištěna služby SQL Server. Zapnutí Příznak trasování zabraňuje oddělení stupňování požadavků jakékoliv budoucí zámek, ale nebude zpětně k uzamknutí oddělení stupňování požadavků, které již nastaly v aktivní transakce.

Vlastnosti

ID článku: 323630 - Poslední aktualizace: 19. května 2011 - Revize: 12.0
Informace v tomto článku jsou určeny pro produkt:
Klíčová slova: 
kbsqlsetup kbinfo kbmt KB323630 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:323630

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com