Megosztás:


Egyidejűség-vezérlés

Az egyidejűség az a képesség, hogy két tranzakció egyszerre használhatja ugyanazokat az adatokat, és a megnövekedett tranzakcióelkülönítés általában csökkenti az egyidejűséget. Ennek az az oka, hogy a tranzakcióelkülönítést általában sorok zárolásával valósítják meg, és mivel több sor zárolva van, kevesebb tranzakciót lehet végrehajtani anélkül, hogy egy zárolt sor legalább ideiglenesen blokkolva lenne. Bár az adatbázis-integritás fenntartásához szükséges magasabb tranzakcióelkülönítési szintek esetében általánosan elfogadott az egyidejűség csökkentése, a kurzort használó, magas olvasási/írási aktivitást használó interaktív alkalmazásokban probléma lehet.

Tegyük fel például, hogy egy alkalmazás végrehajtja a SELECT * FROM Orders SQL utasítást. Meghívja az SQLFetchScrollt , hogy görgessen az eredményhalmaz körül, és lehetővé teszi a felhasználó számára a rendelések frissítését, törlését vagy beszúrását. Miután a felhasználó frissítette, törölte vagy beszúrta a rendelést, az alkalmazás véglegesíti a tranzakciót.

Ha az elkülönítési szint Ismételhető Olvasás, előfordulhat, hogy a tranzakció – a megvalósítás módjától függően – zárolja az SQLFetchScroll által visszaadott minden egyes sort. Ha az elkülönítési szint szerializálható, a tranzakció zárolhatja a teljes Rendelések táblát. A tranzakció bármelyik esetben csak véglegesítésekor vagy visszagördítésekor oldja fel a zárolásokat. Így ha a felhasználó sok időt tölt a rendelések olvasásával, és nagyon kevés időt tölt a frissítések, törlés vagy beszúrásuk során, a tranzakció könnyen zárolhat nagy számú sort, így elérhetetlenné teheti őket más felhasználók számára.

Ez akkor is probléma, ha a kurzor írásvédett, és az alkalmazás lehetővé teszi, hogy a felhasználó csak a meglévő rendeléseket olvassa. Ebben az esetben az alkalmazás véglegesíti a tranzakciót, és feloldja a zárolásokat, amikor meghívja az SQLCloseCursort (automatikus véglegesítési módban) vagy az SQLEndTrant (manuális véglegesítési módban).

Ez a szakasz a következő témaköröket tartalmazza.