Контрол на паралелността на СУБД: клеймо за време и протоколи, базирани на заключване
Какво е контрол на паралелността?
Контрол на паралелността в системата за управление на бази данни е процедура за управление на едновременни операции, без да влизат в конфликт помежду си. Той гарантира, че транзакциите на базата данни се извършват едновременно и точно, за да се получат правилни резултати, без да се нарушава целостта на данните на съответната база данни.
Едновременният достъп е доста лесен, ако всички потребители просто четат данни. Няма как да си пречат. Въпреки че за всяка практическа база данни, тя ще има комбинация от операции READ и WRITE и следователно паралелността е предизвикателство.
Контролът на паралелността на СУБД се използва за справяне с такива конфликти, които възникват най-вече при система с много потребители. Следователно контролът на паралелността е най-важният елемент за правилното функциониране на система за управление на база данни, където две или повече транзакции на база данни се изпълняват едновременно, което изисква достъп до едни и същи данни.
Потенциални проблеми на паралелността
Ето някои проблеми, с които вероятно ще се сблъскате, докато използвате метода за контрол на паралелността на СУБД:
- Загубени актуализации възникват, когато множество транзакции избират един и същ ред и актуализират реда въз основа на избраната стойност
- Проблеми с неограничена зависимост възникват, когато втората транзакция избере ред, който се актуализира от друга транзакция (мръсно четене)
- Неповтарящо се четене възниква, когато втора транзакция се опитва да получи достъп до същия ред няколко пъти и чете различни данни всеки път.
- Проблем с неправилно резюме възниква, когато една транзакция обобщава стойността на всички екземпляри на повтарящ се елемент от данни, а втората транзакция актуализира няколко екземпляра на този конкретен елемент от данни. В тази ситуация полученото обобщение не отразява правилен резултат.
Защо да използвате метода на паралелността?
Причини за използване на метода за контрол на паралелността е СУБД:
- За прилагане на изолация чрез взаимно изключване между конфликтни транзакции
- За разрешаване на конфликтни проблеми при четене-запис и писане-запис
- За запазване на последователността на базата данни чрез постоянно запазване на препятствията при изпълнение
- Системата трябва да контролира взаимодействието между едновременните транзакции. Този контрол се постига с помощта на схеми за едновременно управление.
- Контролът на паралелността помага да се осигури възможност за сериализиране
Пример
Да приемем, че двама души, които отиват до електронни павилиони по едно и също време, за да си купят билет за кино за един и същ филм и в един и същ час на представление.
Има обаче само едно останало място за киното в този конкретен театър. Без контрол на паралелността в СУБД е възможно и двамата киномани да закупят билет. Методът за контрол на едновременността обаче не позволява това да се случи. И двамата киномани все още имат достъп до информацията, записана в базата данни за местата за филми. Но контролът на паралелността предоставя билет само на купувача, който първи е завършил процеса на транзакция.
Протоколи за контрол на паралелността
Различните протоколи за контрол на паралелността предлагат различни предимства между количеството паралелност, което позволяват, и количеството режийни разходи, които налагат. Следват техниките за контрол на паралелността в СУБД:
- Базирани на заключване протоколи
- Двуфазен заключващ протокол
- Протоколи, базирани на времево клеймо
- Базирани на валидиране протоколи
Базирани на заключване протоколи
Базирани на заключване протоколи в СУБД е механизъм, при който транзакция не може да чете или записва данните, докато не получи подходящо заключване. Базираните на заключване протоколи помагат да се елиминира проблемът с паралелността в СУБД за едновременни транзакции чрез заключване или изолиране на конкретна транзакция за един потребител.
Заключването е променлива за данни, която е свързана с елемент от данни. Това заключване означава, че операциите, които могат да се извършват върху елемента с данни. Заключванията в СУБД помагат за синхронизиране на достъпа до елементите на базата данни чрез едновременни транзакции.
Всички заявки за заключване се отправят към мениджъра за едновременно управление. Транзакциите продължават само след като заявката за заключване бъде одобрена.
Двоични ключалки: Двоичното заключване на елемент от данни може да бъде в заключено или отключено състояние.
Споделено/изключително: Този тип заключващ механизъм разделя ключалките в СУБД въз основа на тяхното използване. Ако се получи заключване на елемент от данни за извършване на операция за запис, това се нарича изключително заключване.
1. Споделено заключване (S):
Споделеното заключване се нарича още заключване само за четене. Със споделеното заключване елементът с данни може да се споделя между транзакции. Това е така, защото никога няма да имате разрешение да актуализирате данни за елемента с данни.
Например, разгледайте случай, при който две транзакции четат салдото по сметката на дадено лице. The база данни ще им позволи да четат чрез поставяне на споделена ключалка. Въпреки това, ако друга транзакция иска да актуализира баланса на този акаунт, споделеното заключване предотвратява това, докато процесът на четене приключи.
2. Изключително заключване (X):
С изключителната ключалка елемент от данни може да бъде прочетен, както и написан. Това е изключително и не може да се съхранява едновременно на един и същи елемент от данни. X-lock се изисква с помощта на инструкция lock-x. Транзакциите могат да отключат елемента с данни след приключване на операцията „запис“.
Например, когато транзакция трябва да актуализира салдото по сметката на дадено лице. Можете да разрешите тази транзакция, като поставите X заключване върху нея. Следователно, когато втората транзакция иска да чете или пише, изключителното заключване предотвратява тази операция.
3. Опростен протокол за заключване
Този тип базирани на заключване протоколи позволяват транзакциите да получат заключване на всеки обект преди започване на операция. Транзакциите могат да отключат елемента с данни след приключване на операцията „запис“.
4. Предварително заключване
Протоколът за заключване с предварителна заявка помага да се оценят операциите и да се създаде списък с необходими елементи от данни, които са необходими за започване на процес на изпълнение. В ситуация, когато всички заключвания са предоставени, транзакцията се изпълнява. След това всички ключалки се освобождават, когато всичките му операции приключат.
глад
Гладът е ситуацията, когато транзакцията трябва да изчака неопределен период от време, за да получи заключване.
Причините за гладуване са следните:
- Когато чакащата схема за заключени елементи не се управлява правилно
- В случай на изтичане на ресурс
- Една и съща транзакция се избира многократно като жертва
застой
Безизходица се отнася до конкретна ситуация, при която два или повече процеса чакат един друг да освободят ресурс или повече от два процеса чакат ресурса в кръгова верига.
Двуфазен заключващ протокол
Двуфазен заключващ протокол известен също като 2PL протокол е метод за контрол на паралелността в СУБД, който осигурява възможност за сериализиране чрез прилагане на заключване към данните за транзакцията, което блокира други транзакции за достъп до същите данни едновременно. Протоколът за двуфазово заключване помага да се елиминира проблемът с паралелността в СУБД.
Този протокол за заключване разделя фазата на изпълнение на транзакция на три различни части.
- В първата фаза, когато транзакцията започне да се изпълнява, тя изисква разрешение за ключалките, от които се нуждае.
- Втората част е мястото, където транзакцията получава всички заключвания. Когато транзакцията освободи първото си заключване, започва третата фаза.
- В тази трета фаза транзакцията не може да изисква нови заключвания. Вместо това освобождава само придобитите ключалки.
Протоколът за двуфазно заключване позволява на всяка транзакция да направи заявка за заключване или отключване в две стъпки:
- Фаза на отглеждане: В тази фаза транзакцията може да получи ключалки, но не може да освободи никакви ключалки.
- Фаза на свиване: В тази фаза транзакцията може да освободи ключалки, но не и да получи ново заключване
Вярно е, че протоколът 2PL предлага възможност за сериализиране. Това обаче не гарантира, че не се случват блокирания.
В горната диаграма можете да видите, че локалните и глобалните детектори за блокиране търсят блокирания и ги разрешават с възобновяване на транзакциите до първоначалните им състояния.
Стриктен двуфазен метод на заключване
Системата за строго двуфазно заключване е почти подобна на 2PL. Единствената разлика е, че Strict-2PL никога не освобождава заключване след използването му. Той държи всички ключалки до точката на ангажиране и освобождава всички ключалки наведнъж, когато процесът приключи.
Централизирано 2PL
В Centralized 2 PL един сайт отговаря за процеса на управление на заключването. Има само един мениджър за заключване за цялата СУБД.
Основно копие 2PL
Основно копие 2PL механизъм, много мениджъри за заключване се разпространяват на различни сайтове. След това конкретен мениджър на заключване е отговорен за управлението на заключването за набор от елементи с данни. Когато основното копие е актуализирано, промяната се разпространява към подчинените.
Разпределени 2PL
При този вид двуфазен заключващ механизъм, Lock managers се разпределят към всички сайтове. Те са отговорни за управлението на заключвания за данни на този сайт. Ако не се репликират данни, това е еквивалентно на първично копие 2PL. Комуникационните разходи на Distributed 2PL са доста по-високи от първичното копие 2PL
Протоколи, базирани на времево клеймо
Протокол, базиран на времево клеймо в СУБД е алгоритъм, който използва системното време или логическия брояч като времева марка за сериализиране на изпълнението на едновременни транзакции. Протоколът, базиран на времево клеймо, гарантира, че всички конфликтни операции за четене и запис се изпълняват в ред на клеймо за време.
При този метод винаги се дава приоритет на по-старата транзакция. Той използва системно време, за да определи времевия печат на транзакцията. Това е най-често използваният протокол за паралелност.
Базираните на заключване протоколи ви помагат да управлявате реда между конфликтните транзакции, когато те ще се изпълнят. Протоколите, базирани на времево клеймо, управляват конфликти веднага щом се създаде операция.
Пример:
Suppose there are there transactions T1, T2, and T3. T1 has entered the system at time 0010 T2 has entered the system at 0020 T3 has entered the system at 0030 Priority will be given to transaction T1, then transaction T2 and lastly Transaction T3.
Предимства:
- Графиците могат да се сериализират точно като 2PL протоколите
- Без изчакване на транзакцията, което елиминира възможността за блокиране!
Недостатъци:
Гладуването е възможно, ако една и съща транзакция се рестартира и непрекъснато прекъсва
Протокол, базиран на валидиране
Протокол, базиран на валидиране в СУБД, известен също като Optimistic Concurrency Control Technique е метод за избягване на паралелността в транзакциите. В този протокол локалните копия на данните за транзакцията се актуализират, а не самите данни, което води до по-малко смущения по време на изпълнение на транзакцията.
Базираният на валидиране протокол се изпълнява в следните три фази:
- Прочетете фаза
- Фаза на валидиране
- Напишете фаза
Прочетете фаза
Във фазата на четене стойностите на данните от базата данни могат да бъдат прочетени от транзакция, но операцията за запис или актуализациите се прилагат само към локалните копия на данни, а не към действителната база данни.
Фаза на валидиране
Във фазата на валидиране данните се проверяват, за да се гарантира, че няма нарушение на възможността за сериализиране, докато се прилагат актуализациите на транзакцията към базата данни.
Напишете фаза
Във фазата на запис актуализациите се прилагат към базата данни, ако валидирането е успешно, в противен случай; актуализациите не се прилагат и транзакцията се връща назад.
Характеристики на добър протокол за едновременност
Един идеален механизъм за контрол на паралелността на СУБД има следните цели:
- Трябва да е устойчив на грешки в сайта и комуникацията.
- Позволява паралелното изпълнение на транзакции за постигане на максимална едновременност.
- Неговите механизми за съхранение и изчислителни методи трябва да бъдат скромни, за да се сведат до минимум режийните разходи.
- Той трябва да наложи някои ограничения върху структурата на атомарните действия на транзакциите.
Oбобщение
- Контролът на паралелността е процедурата в СУБД за управление на едновременни операции без конфликт помежду си.
- Загубени актуализации, мръсно четене, неповтарящо се четене и проблем с неправилно обобщение са проблеми, с които се сблъскват поради липса на контрол на паралелността.
- Базиран на заключване, двуфазен, базиран на клеймо на времето, базиран на валидиране са типове протоколи за обработка на едновременност
- Ключалката може да бъде споделена (S) или изключителна (X)
- Протоколът за двуфазно заключване, който също е известен като 2PL протокол, се нуждае от транзакция, трябва да получи заключване, след като освободи едно от заключванията си. Има 2 фази на растеж и свиване.
- Алгоритъмът, базиран на времево клеймо, използва времево клеймо, за да сериализира изпълнението на едновременни транзакции. Протоколът използва Системно време или логическо броене като клеймо за време.