Параллелизм данных

Рубрика: Управление Параллелизмом Данных

Значение по умолчанию механизма блокировки является мелкомодульным - режимом блокировки на уровне строки. Различные транзакции могут обновлять различные строки в пределах той же самой таблицы, не влияя друг на друга.

Параллелизм данных

Хотя модель по умолчанию предусматривает блокировку на уровне строки, БД Oracle поддерживает ручную блокировку на более высоких уровнях при необходимости:

    

SQL> LOCK TABLE employees IN EXCLUSIVE MODE;
Table(s) Locked.

При использовании оператора из примера выше любая другая транзакция, которая пытается обновить строку в заблокированной таблице, будет ожидать, пока транзакция, которая выполнила запрос блокировки, не завершится. EXCLUSIVE является самым строгим режимом блокировки. Далее приведены другие режимы блокировки:

  • ROW SHARE: Разрешает параллельный доступ к заблокированной таблице, но не дает сеансам заблокировать всю таблицу для эксклюзивного доступа

  • ROW EXCLUSIVE: то же самое, что и ROW SHARE, но также запрещает блокировку в режиме SHARE. Блокировки ROW EXCLUSIVE происходят автоматически при обновлении, вставке или удалении данных. Блокировки ROW EXCLUSIVE позволяют читать нескольким сеансам, а осуществлять запись только одному сеансу.

  • SHARE: Разрешает параллельные запросы, но запрещает обновления заблокированной таблицы. Блокировка SHARE требуется (и автоматически запрашивается), чтобы создать индекс таблицы. Однако, онлайновое создание индекса требует блокировки ROW SHARE, которая используется при построении индекса.

  • Блокировки SHARE позволяют нескольким сеансам читать, но никому не разрешают осуществлять запись. Блокировки SHARE также используются прозрачно при удалении или обновлении строк в родительской таблице, у которой есть дочерняя таблица с ограничениями внешнего ключа на родителя.

  • SHARE ROW EXCLUSIVE: Используется, чтобы запрашивать целую таблицу и позволить другим запрашивать строки в таблице, но мешает другим блокировать таблицу в режиме SHARE или обновлять строки

  • EXCLUSIVE: Разрешает запросы к заблокированной таблице, но запрещают любые другие действия с ней. Блокировка EXCLUSIVE требуется для удаления таблицы.

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

NOWAIT возвращает управление Вам сразу, если указанная таблица уже заблокирована другим сеансом:

   
SQL> LOCK TABLE hr.employees IN SHARE MODE NOWAIT;
LOCK TABLE hr.employees IN SHARE MODE NOWAIT
       *
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified

Обычно не возникает необходимости вручную блокировать объекты. Автоматический механизм блокировок обеспечивает параллелизм данных, необходимый для большинства приложений. Oracle рекомендует, чтобы Вы избегали использования ручных блокировок, особенно при разработке приложений. Серьезные проблемы производительности часто происходят из-за излишне высоких уровней блокировок.

Далее: Транзакции и Данные Отката

Смотрите также
Комментарии
Написать

(обязательно)

(обязательно)

Это не спам (обязательно)