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í.
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:
224453
(http://support.microsoft.com/kb/224453/
)
Vysvě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:260652
(http://support.microsoft.com/kb/260652/
)
Vnoř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ě:
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.
ID článku: 323630 - Poslední aktualizace: 19. května 2011 - Revize: 12.0
Informace v tomto článku jsou určeny pro produkt:
| kbsqlsetup kbinfo kbmt KB323630 KbMtcs |
Strojově přeložený článekDů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
(http://support.microsoft.com/kb/323630/en-us/
)