Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Souběžnost je schopnost dvou transakcí používat stejná data současně a se zvýšenou izolací transakcí obvykle dochází ke snížení souběžnosti. Důvodem je to, že izolace transakcí je obvykle implementována uzamčením řádků a s tím, jak jsou uzamčeny další řádky, lze dokončit méně transakcí bez blokování alespoň dočasně uzamčeným řádkem. I když je omezená souběžnost obecně přijímána jako kompromis pro vyšší úrovně izolace transakcí nezbytné pro zachování integrity databáze, může se stát problémem v interaktivních aplikacích s vysokou aktivitou čtení a zápisu, která používá kurzory.
Předpokládejme například, že aplikace spustí příkaz SQL SELECT * FROM Orders. Volá SQLFetchScroll , aby se posouvala po sadě výsledků a umožňuje uživateli aktualizovat, odstranit nebo vložit objednávky. Jakmile uživatel aktualizuje, odstraní nebo vloží objednávku, aplikace potvrdí transakci.
Pokud je úroveň izolace Opakovatelná pro čtení, transakce může – v závislosti na způsobu implementace – uzamknout každý řádek vrácený SQLFetchScroll. Pokud je úroveň izolace Serializovatelná, transakce může uzamknout celou tabulku Orders. V obou případech transakce uvolní své zámky pouze v případě, že je potvrzena nebo vrácena zpět. Takže pokud uživatel tráví hodně času čtením objednávek a velmi málo času aktualizace, odstranění nebo vložení, transakce by mohla snadno uzamknout velký počet řádků, aby byly pro ostatní uživatele nedostupné.
Jedná se o problém, i když je kurzor jen pro čtení a aplikace umožňuje uživateli číst pouze existující objednávky. V tomto případě aplikace potvrdí transakci a uvolní zámky, když volá SQLCloseCursor (v režimu automatického potvrzení) nebo SQLEndTran (v režimu ručního potvrzení).
Tato část obsahuje následující témata.