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:
- Á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.
- 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.
- Amint az első sorban, hogy frissítse a talált - helyezze IX zár az asztalra. A folyamat nagyon fog frissíteni az adatokat.
- Különösen húr készlet X zár.
- 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:
- Az asztalon van beállítva lock - szándék shared
- 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.