Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 28055|Отговор: 3

[Източник] Мултиверсионен контрол на конкурентността в SQL Server

[Копирай линк]
Публикувано в 28.01.2021 г. 17:55:52 ч. | | |
Последователността на базата данни е също един от важните показатели за измерване на производителността на DBMS. В момента повечето търговски бази данни (DB2, SQL Server) използват протокола Two-Phase Locking (2PL) за контрол на конкурентността, който гарантира сериализацията на едновременното изпълнение на транзакции. Въпреки това, 2PL трябва да заключи всякакви данни, преди да може да чете или записва към него. В матрицата за съвместимост на блокиране, S заключванията (Share Locks) и X заключванията (Exclusive Locks) са несъвместими, така че когато транзакция 1 извършва операция за четене върху данни A (плюс S заключване), а транзакция 2 иска да запише в данните (да добави X заключване), тогава транзакция 2 трябва да изчака транзакция 1, за да освободи заключването на S върху данни A, преди да продължи. Мулти-версионният контрол на конкурентността (MVCC) решава този проблем добре. В мултиверсионна система всяка запис генерира нова версия, а операцията по четене може да чете съответната версия при нужда, така че операциите за четене и запис не се блокират взаимно. MVCC увеличава конкурентността, но също така въвежда и разходите за съхранение при поддържане на множество версии.

Базата данни на Microsoft SQL Server въвежда нова реализация на съществуващото ниво на изолация на транзакции – committed reads, които предоставят снимки на ниво оператори чрез версиониране на редове. SQL Server базата данни въвежда и ново ниво на изолация на транзакции – снимки, които предоставят транзакционни снимки, които също използват версията на редове.

Задаването на опцията за READ_COMMITTED_SNAPSHOT база данни на ВКЛЮЧЕНО позволява изолация на committed read чрез версиониране на редове. Настройването на опцията за ALLOW_SNAPSHOT_ISOLATION база данни на ВКЛЮЧЕНО позволява изолиране на моментни снимки. Когато някоя от опциите е активирана за базата данни, двигателят на базата данни поддържа версията на всеки ред, който се променя. Винаги когато транзакция променя ред, изображението на реда преди промяната се копира на страница в хранилището за версии. Хранилището на версии е колекция от страници с данни в tempdb. Ако има няколко линии за модификация на транзакции, няколко версии на тази линия ще бъдат свързани в верига от версии. Операция за четене, използваща версиониране на редове, ще извлече последната версия на всеки ред, която е била записана по време на началото на транзакцията или оператора.

Приложения, написани за SQL Server 2008 или нови за SQL Server, реализират изолация на четени commit-и чрез версиониране на редове, като задават нивото на изолация на транзакциите за четене, когато опцията за READ_COMMITTED_SNAPSHOT база данни е включена. Всички четения ще гледат версията на реда, която е била затвърдена, когато изявлението е започнало. Това ще предостави моментна снимка на данните на ниво оператор.

Приложенията, написани за SQL Server, ще реализират изолация на моментни снимки, като задават нивото на изолация на транзакцията за моментни снимки, когато опцията за ALLOW_SNAPSHOT_ISOLATION база данни е ВКЛЮЧЕНА. Всички четения в snapshot транзакция ще гледат версията на реда, която е била зададена при стартиране на транзакцията. Това ще предостави моментна снимка на данните на ниво транзакция.

За транзакции, които използват нива на изолация, базирани на редове, четенията не изискват споделени заключвания върху данните. Това означава, че четците, използващи версиониране на редове, не пречат на други четци или автори да имат достъп до същите данни. По същия начин писателят не пречи на читателя. Въпреки това, писателите си пречат един на друг (дори когато работят на ниво на изолация, базирано на версии на редове). Две операции по запис не могат да променят едни и същи данни едновременно.

Функцията Snapshot Isolation разширява рамката за заключване в SQL Server 2008, като позволява на приложенията да преглеждат стойности преди да настъпят промени в данните. Това предотвратява заключването на приложението, като същевременно предоставя истински подадените данни. Read Committed Snapshot на SQL Server 2008 изисква активиране от администратор на базата данни, което позволява данните да се четат чрез транзакции само за четене. Така че контролът на SI върху паралелността на транзакциите само за четене е много добър, но не е ясно дали това е така при транзакциите с обновяване. По-неблагоприятно е дългосрочните транзакции с актуализация да конкурират краткосрочните високопоставени транзакции. Ако транзакция между бази данни се опита да използва стандарта Snapshot Isolation (SI), вместо всички бази данни, транзакцията се проваля. Това несъмнено създава определени пречки пред мащабируемостта. Изглежда, че Microsoft все още има дълъг път пред себе си, за да постигне собствен SI, който да е по-силен от спецификацията на SQL 92.

Преди всякаква модификация направете копие на предишната версия и всички последващи операции за четене ще четат копираната версия, а модификацията ще създаде нова версия. По този начин,Операциите по четене и запис не се блокират взаимно. Предимството на използването на този механизъм за версиониране на линии е, че конкурентността на програмата е сравнително висока, но недостатъкът е, че въпреки че потребителят не чете мръсни данни, те може да са стойност, която се модифицира и е на път да изтече. Ако модифицирате данните въз основа на тази изтекла стойност, това ще доведе до логическа грешка

SQL команди:


Референтни връзки:

Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.





Предишен:Elasticsearch (ES) репликира индекса на клониране
Следващ:Урок за cubase10.5
Публикувано в 29.01.2021 г. 9:13:40 ч. |
Сюеси
Публикувано в 15.07.2021 г. 20:37:16 ч. |
Искам го, искам го, искам го, искам гоискам
Публикувано в 12.12.2021 г. 1:22:12 ч. |
Искам го, искам го, искам го
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com