it-swarm-eu.dev

Co je to eskalace zámku?

Tato otázka mi byla položena při rozhovoru a neměla jsem žádnou odpověď. Může tu někdo vysvětlit?

49
Kilhoffer

Zámky DB mohou existovat na řádcích, stránkách nebo celých tabulkách nebo indexech. Když probíhá transakce, zámky držené transakcí zabírají prostředky. Eskalizace eskalace je situace, kdy systém sloučí více zámků do vyšší úrovně (například sloučení více zámků řádků na stránku nebo více stránek do celé tabulky), aby se obvykle získaly zdroje zabrané velkým počtem jemnozrnných zámků.

Bude to provádět automaticky, i když můžete nastavit příznaky v tabulkách (viz ALTER TABLE v knihách on-line), abyste mohli řídit politiku eskalace zámku v konkrétní tabulce. Zejména předčasné nebo příliš dychtivé eskalace zámku bylo problémem na starších verzích Sybase a SQL Server, když jste dva procesy psali oddělené řádky na stejnou stránku současně. Pokud se vrátíte dostatečně daleko (IIRC SQL Server 6.5) SQL Server ve skutečnosti neměl uzamčení řádku, ale mohl uzamknout pouze tabulky nebo stránky. Pokud k tomu došlo, můžete získat spor mezi vložením záznamů na stejné stránce; často byste do tabulky vložili seskupený index, takže nové přílohy šly na jiné stránky.

Jedná se o metodu pro snížení režie systému tím, že se převede mnoho jemnozrnných zámků na méně hrubozrnné zámky. Podrobnější informace naleznete zde a zde .

Například, pokud máte mnoho (obvykle stovek nebo více) zámků na konkrétních řádcích v tabulce, jakmile překročíte maximální povolený počet zámků, mohou být tyto zámky vyměněny za zámek na celé tabulce.

21
Bill the Lizard

SQL Server provede Zámek eskalace za účelem snížit režii paměti převodem několik jemnozrnných zámků s nízkou úrovní k hrubozrnným zámkům s vysokou úrovní.

  • Zámky řádků jsou vždy eskalovány na Zámky tabulek a
  • Zámky stránek jsou také eskalovány na Zámky tabulek.

Je to mýtus, že Řádkové zámky jsou eskalovány na Zámky na stránce , to samé, co bylo uvedeno výše u @ConcernedOfTunbridgeWells, je špatné.

Pokud tabulka, která má jen velmi málo aktualizací řádků, se stroj SQL pokusí o uzamčení řádků na těchto řádcích nebo uzamčení stránek na těchto stránkách. Řekněme, že to zabralo Row-Lock. Pokud však aktualizace řádků zvýší práh (~ 5 000 zámků), pak namísto několika uzamčení řádků zabere jeden zámek tabulky. Tím se snižuje režijní náklady uvolněním několika řádkových zámků a provedením jediného zámku stolů, ale zvyšuje se souběžnost. Totéž se stane se zámkem stránky.

Prahová hodnota blokování eskalace je nejméně 5 000 zámků a závisí na několika faktorech, podrobné vysvětlení zámku eskalace bylo uvedeno v MSDN BoL: - https://technet.Microsoft.com/en-us/library/ms184286 (v = sql.105) .aspx

12
Manoj Pandey

Eskalace zámku znamená převod zámku do restriktivnějšího režimu. To je nejčastěji vidět v databázích. Dotaz může mít zdroj uzamčen pro „sdílený“ a eskalovat jej na „exkluzivní“ pro provedení aktualizace.

5
Richard T