Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
answer.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
54.69 Кб
Скачать
  1. Типи блокувань

READ - блокує таблицю для читання. Всі клієнти можуть отримувати даніодночасно, але ніхто не може їх змінювати, навіть той клієнт, який встановивблокування. WRITE - блокує таблицю для запису. Тільки клієнт встановив блокування може отримувати і змінювати дані. READ LOCAL - блокує таблицю для читання, але дозволяє здійснювати вставкуданих (INSERT). Застосовується тільки до таблиць MyISAM, які не мають дірок, утворених в результаті зміни або видалення рядків. У цьому випадку, додавання нових даних проводиться в кінець таблиці. Якщо таблиця має дірки, то їх можна усунути, використовуючи оператор OPTIMIZE TABLE. LOW_PRIORITY WRITE - блокує таблицю для запису, але під час очікування блокування пропускає тих клієнтів, які стоять у черзі на отримання блокуваннятипу READ. Під час очікування блокування, нові запити на блокування типуREAD також пропускаються вперед, що може потенційно привести до того, щозапис не буде зроблена ніколи (якщо завжди є клієнти в черзі на читання).

  1. Мертві блокування.

"Мертві", або тупикові, блокування характерні для багатокористувацьких систем. "Мертве" блокування виникає, коли дві транзакції блокують два блоки даних і для завершення будь-якої з них потрібен доступ до даних, заблокованим раніше іншою транзакцією. Для завершення кожної транзакції необхідно дочекатися, поки блокована іншою транзакцією частина даних буде розблокована. Але це неможливо, тому що друга транзакція очікує розблокування ресурсів, використовуваних першої. Без застосування спеціальних механізмів виявлення і зняття "мертвих" блокувань нормальна робота транзакцій буде порушена. Якщо в системі встановлений нескінченний період очікування завершення транзакції (а це задано за замовчуванням), то при виникненні "мертвої" блокування для двох транзакцій цілком можливо, що, чекаючи звільнення заблокованих ресурсів, в глухому куті опиняться і нові транзакції. Щоб уникнути подібних проблем, в середовищі MS SQL Server реалізований спеціальний механізм вирішення конфліктів тупикового блокування. Для цих цілей сервер знімає одну з блокувань, що викликали конфлікт, і відкатує ініціалізувати її транзакцію. При виборі блокування, якою необхідно пожертвувати, сервер виходить з міркувань мінімальної вартості. Повністю уникнути виникнення "мертвих" блокувань не можна. Хоча сервер і має ефективні механізми зняття таких блокувань, все ж при написанні програм слід враховувати ймовірність їх виникнення та вживати всіх можливих заходів для попередження цього. "Мертві" блокування можуть істотно знизити продуктивність, оскільки системі потрібно досить багато часу для їх виявлення, відкоту транзакції і повторного її виконання. Для мінімізації можливості утворення "мертвих" блокувань при розробці коду транзакції слід дотримуватися наступних правил: виконувати дії з обробки даних в постійному порядку, щоб не створювати умови для захоплення одних і тих же даних; уникати взаємодії з користувачем в тілі транзакції; мінімізувати тривалість транзакції і виконувати її по можливості в одному пакеті; застосовувати якомога нижчий рівень ізоляції.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]