СУБД Керування паралельністю: Мітка часу & Протоколи на основі блокування

Зміст:

Anonim

Що таке паралельний контроль?

Контроль паралельності в системі управління базами даних - це процедура управління одночасними операціями без конфлікту між собою. Це гарантує, що транзакції бази даних виконуються одночасно і точно для отримання точних результатів без порушення цілісності даних відповідної бази даних.

Одночасний доступ досить простий, якщо всі користувачі просто читають дані. Вони ніяк не можуть заважати один одному. Хоча для будь-якої практичної бази даних вона буде поєднувати операції READ і WRITE, а отже, паралельність є складним завданням.

СУБД Concurrency Control використовується для вирішення таких конфліктів, які здебільшого виникають у багатокористувацькій системі. Отже, контроль паралельності є найважливішим елементом для належного функціонування Системи управління базами даних, де одночасно виконуються дві або більше транзакції баз даних, які вимагають доступу до одних і тих самих даних.

У цьому підручнику ви дізнаєтесь

  • Що таке паралельний контроль?
  • Потенційні проблеми паралельності
  • Навіщо використовувати метод Concurrency?
  • Протоколи контролю паралельності
  • Протоколи на основі блокування
  • Двофазний протокол блокування (2PL)
  • Протоколи, засновані на позначці часу
  • Протокол на основі перевірки
  • Характеристики протоколу Good Concurrency

Потенційні проблеми паралельності

Ось кілька проблем, з якими ви, мабуть, зіткнетеся під час використання методу СУБД Паралельний контроль:

  • Втрачені оновлення відбуваються, коли кілька транзакцій вибирають один і той самий рядок та оновлюють рядок на основі вибраного значення
  • Проблеми нерозв'язаної залежності виникають, коли друга транзакція вибирає рядок, який оновлюється іншою транзакцією ( брудне читання )
  • Неповторне читання відбувається, коли друга транзакція намагається отримати доступ до одного рядка кілька разів і кожного разу зчитує різні дані.
  • Неправильна проблема зведення виникає, коли одна транзакція бере підсумок над значенням усіх екземплярів повторного елемента даних, а друга транзакція оновлює кілька екземплярів цього конкретного елемента даних. У цій ситуації підсумковий підсумок не відображає правильного результату.

Навіщо використовувати метод Concurrency?

Причинами використання методу керування паралельністю є СУБД:

  • Застосувати ізоляцію шляхом взаємного виключення між суперечливими транзакціями
  • Для вирішення конфліктних питань читання-написання та написання-написання
  • Зберегти узгодженість бази даних шляхом постійного збереження перешкод для виконання
  • Система повинна контролювати взаємодію між одночасними транзакціями. Цей контроль досягається за допомогою схем одночасного управління.
  • Контроль паралельності допомагає забезпечити серіалізацію

Приклад

Припустимо, що двоє людей, які одночасно ходять до електронних кіосків, щоб придбати квиток у кіно на той самий фільм і той самий час показу.

Однак у цьому конкретному театрі залишилось лише одне місце для кінопоказу. Без контролю одночасності в СУБД можливо, що обидва кіномани в кінцевому підсумку придбають квиток. Однак метод контролю паралельності не дозволяє цього статися. Обидва кіноглядачі все ще можуть отримати доступ до інформації, записаної в базі даних про місця для відвідування фільмів. Але контроль паралельності надає лише квиток покупцеві, який першим завершив процес транзакції.

Протоколи контролю паралельності

Різні протоколи контролю паралельності пропонують різні переваги між кількістю дозволеної паралельності та сумою накладних витрат, яку вони накладають. Нижче наведено методи контролю паралельності в СУБД:

  • Протоколи на основі блокування
  • Двофазний протокол блокування
  • Протоколи, засновані на відмітках часу
  • Протоколи на основі перевірки

Протоколи на основі блокування

Протоколи, засновані на блокуванні в СУБД - це механізм, при якому транзакція не може читати або записувати дані, поки не отримає відповідну блокування. Протоколи на основі блокування допомагають усунути проблему одночасності в СУБД для одночасних транзакцій, блокуючи або ізолюючи конкретну транзакцію для одного користувача.

Замок - це змінна даних, яка пов'язана з елементом даних. Цей замок означає, що операції, які можна виконати над елементом даних. Блокування в СУБД допомагають синхронізувати доступ до елементів бази даних за допомогою одночасних транзакцій.

Усі запити на блокування надходять до менеджера контролю паралельності. Транзакції тривають лише після того, як надано запит на блокування.

Двійкові замки: двійковий замок для елемента даних може мати як заблоковані, так і розблоковані стани.

Спільний / ексклюзивний: Цей тип механізму блокування розділяє замки в СУБД залежно від їх використання. Якщо блокування отримується для елемента даних для виконання операції запису, це називається ексклюзивним блокуванням.

1. Спільний замок (S):

Спільний замок також називається блокуванням лише для читання. За допомогою спільного блокування елемент даних може бути спільним для транзакцій. Це пов’язано з тим, що ви ніколи не матимете дозволу на оновлення даних про елемент даних.

Наприклад, розглянемо випадок, коли дві транзакції читають залишок на рахунку людини. База даних дозволить їм читати, розмістивши спільний замок. Однак, якщо інша транзакція хоче оновити баланс цього рахунку, спільне блокування запобігає цьому, поки процес читання не закінчиться.

2. Ексклюзивний замок (X):

За допомогою ексклюзивного блокування елемент даних можна читати, а також записувати. Це ексклюзивно і не може одночасно зберігатися на одному і тому ж елементі даних. X-lock запитується за допомогою інструкції lock-x. Транзакції можуть розблокувати елемент даних після завершення операції "запис".

Наприклад, коли транзакція потребує оновлення балансу на рахунку людини. Ви можете дозволити цю транзакцію, розмістивши на ній X lock. Тому, коли друга транзакція хоче читати чи писати, ексклюзивне блокування запобігає цій операції.

3. Спрощений протокол блокування

Цей тип протоколів на основі блокування дозволяє транзакціям отримати блокування для кожного об’єкта перед початком роботи. Транзакції можуть розблокувати елемент даних після завершення операції "запис".

4. Попередня заявка на блокування

Протокол блокування попередньої заявки допомагає оцінити операції та створити список необхідних елементів даних, необхідних для запуску процесу виконання. У ситуації, коли всі блокування надані, транзакція виконується. Після цього всі замки звільняються, коли закінчуються всі його операції.

Голод

Голод - це ситуація, коли транзакція повинна чекати невизначений період, щоб придбати замок.

Ось причини голоду:

  • Під час очікування схема заблокованих предметів не керується належним чином
  • У разі витоку ресурсів
  • Одна і та ж операція неодноразово вибирається як жертва

Тупик

Тупикова ситуація відноситься до конкретної ситуації, коли два або більше процесів чекають один одного, щоб звільнити ресурс, або більше двох процесів чекають ресурсу в круговій ланцюжку.

Двофазний протокол блокування

Двофазний протокол блокування, також відомий як протокол 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
  • Не чекайте транзакції, що виключає можливість тупикових ситуацій!

Недоліки:

Голодування можливе, якщо одну і ту ж транзакцію перезапустити та постійно переривати

Протокол на основі перевірки

Протокол, що базується на валідації в СУБД, також відомий як Техніка оптимістичного контролю паралельності - це метод уникнення паралельності в операціях. У цьому протоколі локальні копії даних транзакції оновлюються, а не самі дані, що призводить до менших перешкод під час виконання транзакції.

Протокол на основі перевірки виконується у такі три етапи:

  1. Фаза читання
  2. Фаза перевірки
  3. Фаза запису

Фаза читання

На етапі читання значення даних з бази даних можуть бути прочитані транзакцією, але операція запису або оновлення застосовуються лише до локальних копій даних, а не до фактичної бази даних.

Фаза перевірки

На етапі перевірки дані перевіряються, щоб переконатися, що не порушено можливості серіалізації під час застосування оновлення транзакцій до бази даних.

Фаза запису

На етапі запису оновлення застосовуються до бази даних, якщо перевірка успішна, інакше; оновлення не застосовуються, а транзакція відкочується.

Характеристики протоколу Good Concurrency

Ідеальний механізм СУБД контролю паралельності має наступні цілі:

  • Повинна бути стійкою до збоїв на сайті та в комунікаціях.
  • Це дозволяє паралельно виконувати транзакції для досягнення максимальної паралельності.
  • Його механізми зберігання та обчислювальні методи повинні бути скромними, щоб мінімізувати накладні витрати.
  • Він повинен застосовувати деякі обмеження щодо структури атомних дій транзакцій.

Резюме

  • Контроль паралельності - це процедура в СУБД для управління одночасними операціями без конфлікту між собою.
  • Втрачені оновлення, брудне читання, неповторне читання та неправильна підсумкова проблема - це проблеми, з якими стикається відсутність контролю паралельності.
  • Блокування, двофазна, на основі часової позначки, перевірка на основі перевірки - це типи протоколів обробки паралельності.
  • Замок може бути спільним (S) або ексклюзивним (X)
  • Двофазний протокол блокування, який також відомий як протокол 2PL, потребує транзакції, щоб отримати блокування після звільнення одного із своїх блокувань. Він має 2 фази зростання і зменшення.
  • Алгоритм на основі мітки часу використовує мітку часу для серіалізації виконання паралельних транзакцій. Протокол використовує системний час або логічний відлік як відмітку часу.