MS SQL adatbázis lelassul, ha egy frissítés - verem túlcsordulás orosz

Ha van egy szabványos SQL Server (nem Azure) alapértelmezés szerint van izolációs szint READ elkövették. Amint ez megtörtént a frissítés:

  1. Állítsa IU - szándéka frissítés zár az asztalra. Ez azt jelenti, hogy a folyamat lesz megtalálható ebben a sorban az asztal frissíteni kell.
  2. Kezdve mozogni sorok keresve azokat, frissíteni kell. Mielőtt ellenőrzi-e vagy sem, hogy frissítse a sorban, akkor kerül U lakat.
  3. Amint az első sorban, hogy frissítse a talált - helyezze IX zár az asztalra. A folyamat nagyon fog frissíteni az adatokat.
  4. Különösen húr készlet X zár.
  5. telepítése U és X zárak folytatódik az összes sor, így a telepítés X-zárak minden sorban frissíteni.

Így az a pillanat, amikor úgy találja, legalább egy bejegyzést a frissítés előtt a tranzakció befejeződött (végéig update) az összes módosított sorok lefagy X-Loka.

Ugyanakkor végre SELECT:

  1. Az asztalon van beállítva lock - szándék shared
  2. Az összes kijelölt sorban vannak beállítva S zár.

A probléma az, hogy pravialam zárak S zár kompatibilitás nem lehet tenni a vonalon, amely már áll X zár. Tulajdonképpen, ez a lényege az izolációs szint READ COMMITTED - X zár azt jelenti, hogy az adat változik egy másik folyamat, de a változások még nem vkommitany - és emiatt nem lehet őket olvasni.

Így, ha sok a frissített adatokat (a teljes asztal, ahol nincs), vagy frissített adatok keresési folyamat hosszú időt vesz igénybe (ahol kikötés van, de az index / statisztikák / nehéz - az, hogy a terv!) - hogy abban az időben a frissítés, minden lóg lelassul és esik timeout.

Hogy ezt elkerüld bosszantó korlátozás lehetséges felvétele pillanatfelvétel izolálása és cseréje READ ELKÖTELEZVE READ_COMMITTED_SNAPSHOT.

A READ_COMMITTED_SNAPSHOT SELECT választja ki adatokat a saját példány, és nem fogja beállítani S zárak sorokat. Cootvetstvenno nem megbotlik, ha telepíti az S zárak rossz X zárak, és nem várja meg őket.

Az SQL Azure READ_COMMITTED_SNAPSHOT alapértelmezés szerint engedélyezett, és nem lehet leállítani.

Kapcsolódó cikkek