Lock eszkalációs (adatbázis motor alkatrész)

Lock eszkalációs - a folyamat átalakításának sok melkogranulirovannyh rögzül kevesebb krupnogranulirovannyh rögzíti a várható növekedés párhuzamossága versenyt.

Amint egy komponens SQL Server Database Engine megkapja az alacsony szintű zár, ez határozza meg a zár szándék tárgyak tartalmazó tárgyak egy alacsonyabb szinten.

Amikor blokkoló vonalak vagy tartományok index kulcseleme Database Engine teszi szándékát zárat tartalmazó oldalak ezeket a sorokat, vagy gombokat.

Az oldalak blokkolását a Database Engine helyezi zár a magasabb szintű objektumok, amelyek tartalmazzák ezeket az oldalakat. Amellett, hogy blokkolja szándékok lapozható lezárható objektumot létrehozni, a tárgyakat.

Fürtözött végső szint indexek

Pages fürtözött index adatok

Adatoldalakon halom

A Database Engine lehet az azonos utasításokat, hogy telepítse a zár mind on-line és az oldalon, annak érdekében, hogy minél kevesebb zárak és megszünteti a konszolidáció szükségessége a zár. Például Database Engine komponens a zárolást egy nem fürtözött index oldalt (ha elegendő számú, egymást követő kiválasztott legfontosabb az index csomópont találkozni lekérdezés kritériumok) és reteszelő sort az adatok oldalakon.

Nagyításhoz a zárat, Database Engine megpróbálja megváltoztatni a zár alkatrész egy tervet az asztalra a megfelelő teljes zár, mint a zár váltással szándékkal exkluzív (IX) exkluzív (X) vagy a zár, azzal a céllal, hogy összekapcsolják hozzáférés (IS) egy megosztott (S). Ha lakat eszkalációs kísérlet sikeres volt, és kapott egy teljes táblázat zár, akkor szabaddá teszi a zárak bolyhos, kiegyensúlyozott fa lapok (PAGE), és a zárat a sor szintű (RID), akik tartottak egy csomó az ügylet vagy indexet. Ha nem tud egy teljes zár, ebben a pillanatban nincs zár eszkalációs és a Database Engine továbbra is kapnak sorban zárak, kulcsok, vagy oldalakat.

Zárak HOBt szintje általában megemelkedik konkurencia, de potenciális kockázatot jelenthetnek a patthelyzet az esetben, ha a tranzakció blokk különböző szakaszok, és próbálja terjeszteni kizárólagos zár a többi rész. Ritka esetekben, tagoltságát reteszelő TÁBLÁZAT lehet egy jobb megoldás.

Ha lakat eszkalációs kísérlet meghiúsul ütköző zár tartott konkurencia, Database Engine alkatrész próbálkozás minden további 1250 zárak kapott tranzakciót.

Minden bővítése az esemény zajlik elsősorban szintjén egy-SQL nyilatkozat komponenst. Az elején az esetben, ha a Database Engine igyekszik növelni a zárakat, amelyek tulajdonában lévő ügylet, minden asztal által hivatkozott aktív utasítást, feltéve, hogy az megfelel-emelése a küszöböt. Ha konszolidáció esemény kezdete előtt az utasításokat, hogy hozzáférjen az asztalra, és megpróbálta lezárni eszkalációs E táblázat venni. Ha lakat eszkaláció sikeres, minden zárat szerzett az ügylet a korábbi utasítás és még meglévő idején az esemény kezdetekor, növekedik, ha a tábla hivatkozott az aktuális műveletet, és szerepel a táblázatban emelése esetén.

Tegyük fel, hogy egy munkamenet a következő műveleteket végzi:

Frissíti az asztal TABLEA. E sorok képződnek kizárólagos zárak TABLEA táblázatban. tartják, amíg a tranzakció befejeződött.

Frissíti az asztal TableB. Ez az exkluzív zár képződik TableB sor a táblázatban. tartják, amíg a tranzakció befejeződött.

Végrehajt egy SELECT összekötő TABLEA asztal és TableC. lekérdezés végrehajtási terv magában kitermelése sorokat TABLEA táblázat sorok lekérésének TableC asztalra.

SELECT utasítás felhívja zár eszkalációs kibontásakor sorokat TABLEA asztalra, mielőtt kap hozzáférést TableC asztalra.

Ha lakat eszkaláció sikeres, méretének növelését csak zárak tartott egy előadást az asztalnál TABLEA. Ezek közé tartozik a megosztott zárak SELECT, és kizárólagos zárak előző UPDATE nyilatkozatot. Meghatározzuk a konszolidáció szükségessége elszámolni csak a zár, hogy a session volt a SELECT utasítás a TABLEA. után a sikeres konszolidáció zárak összes zár által tartott ülésén TABLEA táblázatban. eldurvít amíg kizárólagos zár az asztalra, és az összes többi zár alacsonyabb szinten, köztük a zár a séta TABLEA. adómentes.

Megpróbálja bővíteni a zárat asztalra TableB nem vett, mert a SELECT utasítás nem aktív linkek az asztalra TableB. Hasonlóképpen nem próbálja növelni a lock-in TableC táblázatban. mert nem volt képes elérni az ideje felnagyítva.

Tartalmazza a zár eszkalációs ha nincs letiltva a tábla használatával az ALTER TABLE SET LOCK_ESCALATION, és ha az alábbi feltételek mellett.

A Transact-SQL kap több mint 5000 zárak egy nem particionált tábla vagy index.

A Transact-SQL kap több mint 5000 zárak egyik partíción a particionált tábla, és az opció ALTER TABLE SET LOCK_ESCALATION beállítása AUTO.

A több zár a Database Engine komponens például meghaladja a memória vagy előre meghatározott küszöbértéket.

Ha a zár nem nagyíthatók miatt a zár konfliktus Database Engine alkatrész időközönként elindítsa zár emelése a készítmény minden 1250 új zárak.

Konszolidáció küszöbök-SQL nyilatkozat

Lock eszkalációs végzik csak a táblákat, amelyekre a belépés után nyert Start növekszik. Tegyük fel, hogy a SELECT utasítás vegyület hozzáférést kaphatnak a három asztal a következő sorrendben: TABLEA. TableB és TableC. Ez az utasítás kap 3000 sorzárolások a fürtözött index táblázat TABLEA és legalább 5000 sorzárolások a fürtözött index TableB asztalra. de én még nem juthattak TableC asztalra. Ha a Database Engine észleli, hogy a kapott oktatás legalább 5000 sorzárolások a TableB táblázatban. ő próbál növelni a zárakat, amelyek birtokában a jelenlegi ügylet TableB táblázatban. Ez az összetevő is próbál növelni az összes zár birtokában lévő ügylet asztalra TABLEA. de mivel a száma zárak TABLEA kisebb, mint 5000, akkor a kísérlet sikertelen lesz. Táblázat TableC ilyen kísérletek nem végeznek el, mivel hozzáférést biztosít az időben zár eszkaláció nem kapta meg.

bővítése a küszöböt az esetben a Database Engine

Amikor a száma zárak meghaladja a memória küszöbértéket zár eszkaláció Database Engine összetevő kezdeményezi zár eszkaláció. memória küszöb függ konfigurációs paraméter zárak:

Ha zárak paraméter alapértelmezett értéke 0, zár eszkalációs küszöb elérésekor, ha a memória által használt akadályozó tárgyakat 24% a memória Database Engine komponens kivételével memória AWE. Egy adatstruktúrában a zárnak van egy hossza mintegy 100 byte. Ez a küszöb a dinamikus, hiszen a Database Engine összetevő dinamikusan kapja, és felszabadítja a memóriát, hogy kompenzálja a változó terhelés.

Ha zárak paraméter értéke 0-tól eltérő, zár eszkalációs küszöb 40 százalék (vagy kevesebb, ha a memóriában kicsi) GKM zárak.

Component Database Engine kiválaszthatja a bővítés utasítást sem aktív kapcsolat, és rögzíti az új 1250 kiválasztja utasítást növekszik, ha használjuk például a memóriát meghaladja a küszöbértéket növekedését.