Datu bāzes konsekvence ir arī viens no svarīgākajiem rādītājiem, lai novērtētu DBVS veiktspēju. Šobrīd lielākā daļa komerciālo datu bāzu (DB2, SQL Server) vienlaicīguma kontrolei izmanto divfāžu bloķēšanas (2PL) protokolu, kas nodrošina vienlaicīgas darījumu izpildes serializāciju. Tomēr 2PL ir jābloķē visi dati, pirms tie var lasīt vai rakstīt. Bloķēšanas saderības matricā S slēdzenes (koplietošanas slēdzenes) un X slēdzenes (ekskluzīvas slēdzenes) nav saderīgas, tāpēc, ja 1. darījums veic datu A nolasīšanas operāciju (plus S slēdzene) un 2. darījums vēlas rakstīt datos (pievienojiet X slēdzeni), tad 2. darījumam ir jāgaida, līdz 1. darījums atbrīvos S bloķēšanu datiem A, pirms turpināt. Vairāku versiju vienlaicīguma kontrole (MVCC) labi atrisina šo problēmu. Vairāku versiju sistēmā katrs rakstīšanas dati ģenerē jaunu versiju, un lasīšanas operācija var nolasīt atbilstošo versiju pēc vajadzības, tāpēc lasīšanas un rakstīšanas operācijas nebloķē viena otru. MVCC palielina vienlaicīgumu, bet tas arī ievieš krātuves pieskaitāmās izmaksas vairāku versiju uzturēšanai.
Microsoft SQL Server datu bāzes programma ievieš jaunu esošā transakciju izolācijas līmeņa ieviešanu - saistīto lasīšanu, kas nodrošina priekšraksta līmeņa momentuzņēmumus, izmantojot rindu versiju izveidi. SQL Server datu bāzes programma ievieš arī jaunu transakciju izolācijas līmeni - momentuzņēmumus, lai nodrošinātu transakcijas līmeņa momentuzņēmumus, kuros tiek izmantota arī rindu versiju izveide.
Iestatot READ_COMMITTED_SNAPSHOT datu bāzes opciju uz ON, tiek iespējota noteikta lasīšanas izolācija, izmantojot rindu versiju izveidi. Iestatot opciju ALLOW_SNAPSHOT_ISOLATION datu bāzi uz IESLĒGTS, tiek iespējota momentuzņēmumu izolācija. Ja datu bāzei ir iespējota kāda no opcijām, datu bāzes programma uztur katras modificētās rindas versiju. Ikreiz, kad transakcija modificē rindu, rindas attēls pirms modifikācijas tiek kopēts uz lapu versiju krātuvē. Versiju krātuve ir datu lapu kolekcija tempdb. Ja ir vairākas transakciju modifikācijas rindas, versiju ķēdē tiks saistītas vairākas šīs rindas versijas. Lasīšanas operācija, izmantojot rindu versiju izveidi, izgūs katras rindas pēdējo versiju, kas tika apstiprināta transakcijas vai pārskata sākuma laikā.
Lietojumprogrammas, kas rakstītas SQL Server 2008 vai jaunas SQL Server, ievieš lasīšanas saistību izolāciju, izmantojot rindu versiju izveidi, norādot transakciju izolācijas līmeni lasīšanas saistībām, kad READ_COMMITTED_SNAPSHOT datu bāzes opcija ir IESLĒGTA. Visos lasījumos tiks aplūkota rindas versija, kas tika veikta, kad sākās paziņojums. Tas nodrošinās pārskatu līmeņa datu momentuzņēmumu.
Lietojumprogrammas, kas rakstītas SQL Server, ieviesīs momentuzņēmumu izolāciju, norādot momentuzņēmumu transakciju izolācijas līmeni, kad ALLOW_SNAPSHOT_ISOLATION datu bāzes opcija ir IESLĒGTA. Visos momentuzņēmumu transakcijā tiks aplūkota rindas versija, kas tika veikta darījuma sākumā. Tas nodrošinās darījumu līmeņa datu momentuzņēmumu.
Transakcijām, kurās tiek izmantoti rindu izolācijas līmeņi, lasījumi nepieprasa datu koplietojamu bloķēšanu. Tas nozīmē, ka lasītāji, kas izmanto rindu versiju izveidi, neliedz citiem lasītājiem vai rakstītājiem piekļūt tiem pašiem datiem. Tāpat rakstnieks netraucē lasītājam. Tomēr rakstnieki traucē viens otram (pat tad, ja darbojas izolācijas līmenī, pamatojoties uz rindu versiju izveidi). Divas rakstīšanas operācijas nevar vienlaikus modificēt vienus un tos pašus datus.
Momentuzņēmumu izolācijas līdzeklis paplašina SQL Server 2008 bloķēšanas sistēmu, ļaujot lietojumprogrammām skatīt vērtības pirms jebkādas datu modifikācijas. Tas novērš lietojumprogrammas bloķēšanu, vienlaikus nodrošinot patiesi iesniegtus datus. SQL Server 2008 Read Committed momentuzņēmums aktivizē datu bāzes administratoru, ļaujot datus lasīt tikai lasāmās transakcijās. Tātad SI tikai lasāmo darījumu vienlaicīguma kontrole ir ļoti laba, taču nav skaidrs, vai tas attiecas uz atjaunināšanas darījumiem. Ilgtermiņa atjauninājumu darījumiem ir neizdevīgāk konkurēt ar īstermiņa augsta līmeņa darījumiem. Ja transakcija starp datu bāzēm mēģina izmantot momentuzņēmumu izolācijas (SI) standartu, nevis visas datu bāzes iestatītas, transakcija neizdodas. Tas neapšaubāmi rada zināmus šķēršļus mērogojamībai. Šķiet, ka Microsoft vēl ir tāls ceļš ejams, lai sasniegtu savu SI, kas ir spēcīgāks par SQL 92 specifikāciju.
Pirms jebkuras modifikācijas izveidojiet iepriekšējās versijas kopiju, un visas turpmākās lasīšanas darbības nolasīs kopēto versiju, un modifikācija izveidos jaunu versiju. Tādā veidāLasīšanas un rakstīšanas operācijas nebloķē viena otru. Šī līnijas versiju izveides mehānisma izmantošanas priekšrocība ir tā, ka programmas vienlaicīgums ir salīdzinoši augsts, bet trūkums ir tāds, ka, lai gan lietotājs nelasa netīrus datus, tā var būt datu vērtība, kas tiek modificēta un drīz beigsies. Ja modificējat datus, pamatojoties uz šo vērtību, kurai beidzies derīguma termiņš, tas radīs loģisku kļūdu。
SQL komandas:
Atsauces saites:
Hipersaites pieteikšanās ir redzama.
Hipersaites pieteikšanās ir redzama.
Hipersaites pieteikšanās ir redzama.
Hipersaites pieteikšanās ir redzama.
Hipersaites pieteikšanās ir redzama.
Hipersaites pieteikšanās ir redzama.
|