Andmebaasi järjepidevus on samuti üks olulisi näitajaid DBMS-i jõudluse mõõtmisel. Praegu kasutavad enamik kommertsandmebaase (DB2, SQL Server) samaaegsuse kontrolliks kahefaasilise lukustamise (2PL) protokolli, mis tagab samaaegse tehingu käivitamise serialiseerimise. Kuid 2PL peab enne lugemist või kirjutamist lukustama kõik andmed. Blokeerimise ühilduvuse maatriksis on S-lukud (jagamislukud) ja X lukud (eksklusiivsed lukud) omavahel sobimatud, seega kui tehing 1 teostab lugemisoperatsiooni andmetele A (pluss S-lukk) ja tehing 2 soovib andmetesse kirjutada (lisada X-lukk), peab tehing 2 ootama, kuni tehing 1 vabastab S-luku andmele A, enne kui jätkab. Multi-Version Concurrency Control (MVCC) lahendab selle probleemi hästi. Mitmeversioonilises süsteemis genereerib iga kirjutamisinfo uue versiooni ning lugemisoperatsioon saab vajadusel sobivat versiooni lugeda, nii et lugemis- ja kirjutamistoimingud ei blokeeri üksteist. MVCC suurendab samaaegsust, kuid toob kaasa ka salvestuskoormuse, mis kaasneb mitme versiooni haldamisega.
Microsoft SQL Server andmebaasimootor tutvustab olemasoleva tehinguisolatsiooni taseme uut rakendust – committed reads, mis pakuvad lausetaseme hetktõmmisi reaversioonide abil. SQL Serveri andmebaasimootor toob sisse ka uue tehingute isoleerimise taseme – hetktõmmised, mis pakuvad tehingutasemel hetktõmmisi ja kasutavad samuti reaversiooni.
READ_COMMITTED_SNAPSHOT andmebaasi valiku seadistamine ON võimaldab pühendunud lugemisisolatsiooni reaversioonide abil. ALLOW_SNAPSHOT_ISOLATION andmebaasi valiku seadistamine SISSE võimaldab hetkepildi isoleerimist. Kui üks neist valikutest on andmebaasis lubatud, hoiab andmebaasimootor iga muudetud rea versiooni. Iga kord, kui tehing muudab rida, kopeeritakse rea pilt enne muudatust versioonipoe lehele. Versioonihoidja on tempdb-s andmelehtede kogum. Kui on mitu tehingu muutmise rida, on selle rea mitu versiooni seotud versiooniahelasse. Read-versiooni kasutamine lugemistoiming taastab iga rea viimase versiooni, mis tehti tehingu või lause alguses.
SQL Server 2008 jaoks kirjutatud või SQL Serveris uued rakendused rakendavad lugemiscommitide isoleerimist reaversioonide abil, määrates lugemiscommitide tehinguisolatsiooni taseme, kui READ_COMMITTED_SNAPSHOT andmebaasi valik on sisse lülitatud. Kõik lugemised vaatavad rea versiooni, mis oli tehtud avalduse alguses. See annab andmetest avalduse tasemel hetkepildi.
SQL Serveri jaoks kirjutatud rakendused rakendavad hetktõmmise isoleerimist, määrates hetktõmmise tehingu isoleerimise taseme, kui ALLOW_SNAPSHOT_ISOLATION andmebaasi valik on sisse lülitatud. Kõik hetktõmmise tehingu lugemised vaatavad rea versiooni, mis tehingu alguses kinnitati. See annab tehingutasemel ülevaate andmetest.
Tehingute puhul, mis kasutavad reapõhiseid isolatsioonitasemeid, ei taotle lugemised andmetele jagatud lukustusi. See tähendab, et read-versiooni kasutavad lugejad ei takista teistel lugejatel või kirjutajatel samadele andmetele ligipääsemast. Samamoodi ei sega kirjanik lugejat. Kuid kirjanikud segavad üksteist (isegi siis, kui nad töötavad teatud isolatsioonitasemel, mis põhineb ridade versioonil). Kaks kirjutamistoimingut ei saa samaaegselt sama andmestikku muuta.
Snapshot Isolation funktsioon laiendab SQL Server 2008 lukustusraamistikku, võimaldades rakendustel väärtusi vaadata enne andmete muutmist. See takistab rakenduse lukustamist, pakkudes samal ajal tõeliselt esitatud andmeid. SQL Server 2008 Read Committed Snapshot nõuab andmebaasi administraatori aktiveerimist, võimaldades andmeid lugeda ainult lugemise tehingutega. Seega on SI samaaegne kontroll ainult lugemispõhiste tehingute puhul väga hea, kuid pole selge, kas see kehtib uuendustehingute puhul. Pikaajalised uuendustehingud ei suuda konkureerida lühiajaliste kõrgetasemeliste tehingutega. Kui tehing andmebaastevaheline püüab kasutada Snapshot Isolation (SI) standardit, mitte kõiki seatud andmebaase, ebaõnnestub tehing. See tekitab kahtlemata teatud takistusi skaleeritavusele. Tundub, et Microsoftil on veel pikk tee minna, et saavutada oma tugevam SI kui SQL 92 spetsifikatsioon.
Enne muudatusi tee eelmisest versioonist koopia ning kõik järgnevad lugemistoimingud loevad kopeeritud versiooni ja muudatus loob uue versiooni. Nii,Lugemis- ja kirjutamistoimingud ei blokeeri üksteist. Selle reaversiooni mehhanismi eeliseks on programmi paralleelsus suhteliselt suur, kuid puuduseks on see, et kuigi kasutaja ei loe musta andmet, võib see olla andmeväärtus, mida muudetakse ja mis aegub. Kui muudate andmeid selle aegunud väärtuse põhjal, tekib loogiline viga。
SQL-käsud:
Viitelingid:
Hüperlingi sisselogimine on nähtav.
Hüperlingi sisselogimine on nähtav.
Hüperlingi sisselogimine on nähtav.
Hüperlingi sisselogimine on nähtav.
Hüperlingi sisselogimine on nähtav.
Hüperlingi sisselogimine on nähtav.
|