Konzistentnosť databázy je tiež jedným z dôležitých ukazovateľov na meranie výkonu DBMS. V súčasnosti väčšina komerčných databáz (DB2, SQL Server) používa protokol Two-Phase Locking (2PL) na riadenie súbežnosti, ktorý zabezpečuje serializáciu vykonávania súbežných transakcií. Avšak 2PL musí uzamknúť akékoľvek dáta, aby ich mohol čítať alebo zapisovať. V matici kompatibility blokovania sú S zámky (Share Locks) a X zámky (Exclusive Locks) nekompatibilné, takže keď transakcia 1 vykonáva čítaciu operáciu na dátach A (plus S lock) a transakcia 2 chce zapísať do dát (pridať X lock), transakcia 2 musí počkať, kým transakcia 1 uvoľní S zámok na dátach A, aby mohla pokračovať. Multi-Version Concurrency Control (MVCC) tento problém dobre rieši. V systéme s viacerými verziami každé zápisové dáta generujú novú verziu a operácia čítania môže podľa potreby čítať príslušnú verziu, takže operácie čítania a zápisu sa navzájom neblokujú. MVCC zvyšuje súbežnosť, ale zároveň prináša režijné náklady na ukladanie viacerých verzií.
Databázový engine Microsoft SQL Server predstavuje novú implementáciu existujúcej úrovne izolácie transakcií – záväzných čítaní, ktoré poskytujú snapshoty na úrovni príkazov pomocou veršovania riadkov. Databázový engine SQL Server tiež prináša novú úroveň izolácie transakcií – snapshoty na poskytovanie snapshotov na úrovni transakcií, ktoré tiež využívajú veršovanie riadkov.
Nastavenie možnosti READ_COMMITTED_SNAPSHOT databázy na ON umožňuje záväznú izoláciu čítania pomocou veršového verzionovania. Nastavenie možnosti ALLOW_SNAPSHOT_ISOLATION databázy na ON umožňuje izoláciu snímok. Keď je pre databázu povolená ktorákoľvek z možností, databázový engine udržiava verziu každého riadku, ktorý je upravený. Kedykoľvek transakcia upraví riadok, obraz riadku pred úpravou sa skopíruje na stránku v úložisku verzií. Úložisko verzií je zbierka dátových stránok v tempdb. Ak existuje viacero riadkov na úpravu transakcií, viaceré verzie tejto linky budú prepojené v reťazci verzií. Operácia čítania pomocou veršovania riadkov získa poslednú verziu každého riadku, ktorá bola potvrdená v čase začiatku transakcie alebo príkazu.
Aplikácie napísané pre SQL Server 2008 alebo nové pre SQL Server implementujú izoláciu read-commitov pomocou veršovania riadkov tým, že špecifikujú úroveň izolácie transakcií pre read-commity, keď je možnosť READ_COMMITTED_SNAPSHOT databázy ZAPNUTÁ. Všetky čítania sa pozrú na verziu riadku, ktorá bola zapísaná na začiatku vyhlásenia. To poskytne snapshot dát na úrovni príkazu.
Aplikácie napísané pre SQL Server implementujú izoláciu snapshotov tým, že špecifikujú úroveň izolácie snapshot transakcií, keď je možnosť ALLOW_SNAPSHOT_ISOLATION databázy ZAPNUTÁ. Všetky čítania v snapshot transakcii sa pozrú na verziu riadku, ktorá bola potvrdená pri začiatku transakcie. To poskytne snímku dát na úrovni transakcie.
Pri transakciách, ktoré používajú úrovne izolácie založené na riadkoch, čítania nevyžadujú zdieľané zámky na dátach. To znamená, že čitatelia používajúci veršovanie riadkov nebránia iným čitateľom alebo autorom v prístupe k rovnakým údajom. Podobne autor neprekáža čitateľovi. Avšak spisovatelia si navzájom prekážajú (aj keď bežia na úrovni izolácie založenej na veršovom verzionovaní). Dve zápisové operácie nemôžu súčasne meniť tie isté dáta.
Funkcia Snapshot Isolation rozširuje rámec zamykania v SQL Server 2008 tým, že umožňuje aplikáciám zobraziť hodnoty pred akýmikoľvek zmenami dát. Tým sa zabráni uzamknutiu aplikácie, pričom sa stále poskytujú skutočne odoslané údaje. Read Committed Snapshot v SQL Server 2008 vyžaduje aktiváciu administrátora databázy, čo umožňuje čítať dáta prostredníctvom transakcií iba na čítanie. Takže súbežnosť transakcií iba na čítanie v SI je veľmi dobrá, ale nie je jasné, či to platí aj pre aktualizačné transakcie. Je menej výhodné, ak dlhodobé aktualizačné transakcie súťažia s krátkodobými transakciami na vysokej úrovni. Ak sa transakcia naprieč databázami pokúsi použiť štandard Snapshot Isolation (SI) namiesto nastavenia všetkých databáz, transakcia zlyhá. To nepochybne vytvára určité prekážky škálovateľnosti. Zdá sa, že Microsoft má ešte dlhú cestu pred sebou, aby dosiahol svoj vlastný SI, ktorý je silnejší než špecifikácia SQL 92.
Pred akoukoľvek úpravou si urobte kópiu predchádzajúcej verzie a všetky následné čítacie operácie prečítajú skopírovanú verziu, pričom úprava vytvorí novú verziu. Týmto spôsobom,Operácie čítania a zápisu sa navzájom neblokujú. Výhodou použitia tohto mechanizmu verzovania riadkov je, že súbežnosť programu je relatívne vysoká, ale nevýhodou je, že hoci používateľ nečíta špinavé dáta, môže ísť o hodnotu, ktorá sa upravuje a čoskoro vyprší. Ak dáta upravíte na základe tejto expirovanej hodnoty, spôsobí to logickú chybu。
SQL príkazy:
Referenčné odkazy:
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
|