Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Проблема втрати оновлень




План

1. Проблеми одночасної роботи декількох користувачів з одними й тими ж об’єктами бази даних.

2. Механізм блокувань. Види блокувань.

 

В процесі одночасної роботи декількох користувачів з одними й тими ж об’єктами бази даних СКБД паралельно виконує множину транзакцій. При цьому можуть виникнути наступні проблеми.

 

Наприклад, в БД зберігається запис з відомостями про наявність на складі деякого товару (поля Название товараКоличество, шт.):

Костюм 50

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

Першому користувачу треба відобразити в базі даних факт вступу на склад 100 костюмів. Він змінює існуючі дані та зберігає оновлений запис в базі даних. Кількість костюмів складає 150 штук.

Другому користувачу треба врахувати інформацію про передачу 20 костюмів зі складу в магазин. Він змінює існуючі в нього дані та також зберігає запис.

В підсумку в базі даних буде зберігатися помилкова інформація про наявність на складі 30 костюмів (в дійсності їх повинно бути 130), так як зміни, занесені першим користувачем, втрачені.

 

2. Проблема залежності від незафіксованих оновлень

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

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

За допомогою першої транзакції в базі даних необхідно прийняти до уваги факт передачі зі складу в магазин 100 костюмів. Так як на складі немає такої кількості товарів, очевидно, що відбувся збій. Ймовірно, помилки припустився оператор, який заносив інформацію. Можливість виникнення схожої ситуації контролюється СКБД, яка передбачає відміну транзакцій, які призвели до помилкових результатів. Тим не менш тимчасово, до завершення транзакції та наступної її відміни, кількість костюмів в початковому записі бази даних буде змінена та буде дорівнювати мінус 50.

Виконуючи паралельно друга транзакція враховує вступ на склад 200 костюмів. В підсумку загальна кількість костюмів на складі складе 150 штук.

СКБД завершує першу транзакцію, відміняє її та відновлює початковий стан бази даних. В результаті кількість костюмів на складі дорівнює 50. При цьому втрачені відомості про постачання нової партії товарів.

 

3. Проблема неузгоджуваного аналізу

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

Припустимо, що в базі даних зберігаються записи про наявність товарів на трьох складах торгівельного підприємства (поля Название склада – Количество, шт.):

Склад 1 50
Склад 2 100
Склад 3 200

 

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

Припустимо, що дії в межах транзакцій виконуються в наступному порядку:

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

2. Друга транзакція читає третій запис. Кількість товарів – 200 штук.

3. Перша транзакція читає другий запис. Кількість товарів – 100 штук, сума дорівнює 150.

4. Друга транзакція відраховує 100 штук товару з кількості, яка вказана в третьому записі. Оновлене значення кількості товарів в третьому записі складає 100 штук.

5. Перша транзакція читає третій запис. Кількість товарів – 100 штук, сума дорівнює 250.

6. Друга транзакція читає перший запис та додає до зберігаємої в ній кількості товарів (50 штук) 100 поступивших одиниць. Оновлене значення кількості товарів в першому записі складає 150 штук.

 

В результаті неузгоджуваного аналізу перша транзакція невірно обчислила сумарну кількість товарів. Вона складає 250 штук при фактичному значенні 350 штук.

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

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

 

Можливі два види блокувань:

1. Монопольне блокування (X-блокування, eXclusive locks).

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

2. Блокування з взаємним доступом (S-блокування, Shared locks).

Це блокування дозволяє звертатися до об’єкту бази даних одночасно декільком транзакціям, але лише в режимі читання (оновлення та знищення інформації заборонені).

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

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

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




Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 237; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.016 сек.