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