Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Общие и эксклюзивные блокировки

Общие и эксклюзивные блокировкиСуществуют общие и эксклюзивные блокировки — все зависит от способа использования ресурсов. В Oracle, когда клиентский процесс осуществляет доступ к ресурсу, он его явно блокирует с помощью одного из типов блокировок, перечисленных в табл. 7.11. Такая блокировка замещает собой любые автоматические настройки блокировок. К примеру, в следующем примере устанавливается эксклюзивная блокировка таблицы CUSTOMER в базе данных ACME. Транзакция, в которой присутствует данная инструкция, попытается заблокировать таблицу для монопольного использования и установить ограничения, определенные в табл. 7.11. Если какой-либо другой процесс попытается заблокировать эту же таблицу, его транзакция будет поставлена в очередь с соответствующим приоритетом. Блокировка будет поддерживаться на протяжении всей транзакции (т. е. до выполнения инструкции COMMIT). При этом, если первая транзакция попытается обратиться к ресурсу, заблокированному второй транзакцией, наступит состояние Взаимоблокировки. Предложение NOWAIT указывает транзакции продолжить свое выполнение, если таблица, которую она пытается заблокировать, уже заблокирована другой транзакцией.

Если инструкция LOCK выполняется относительно представления, Oracle попытается заблокировать его базовые таблицы. В некоторых типах операций блокировка обязательна. В Oracle инструкция DDL может быть выполнена в таблице только в том случае, если та будет заблокирована. (В Oracle можно заблокировать и другие типы объектов, в частности Связи базы данных.) В Oracle в инструкциях create и alter table определено специальное предложение, в котором можно либо разрешить, либо запретить блокировку таблицы. Отключение возможности блокировки таблицы не позволит выполнить в ней никакую инструкцию DDL. Компания Oracle предлагает несколько советов относительно оптимизации производительности, некоторые из них влияют на блокировки, устанавливаемые Oracle. Несмотря на всю свою важность, эти советы выходят за рамки книги; при желании их можно найти в документации Oracle. В некоторых СУБД, в частности в Microsoft SQL Server 2008 и IBM DB2 9.5, реализован механизм, называемый Эскалацией блокировок. Этим термином называют процесс автоматического повышения гранулярности блокировок с целью уменьшения нагрузки на систему. В Oracle 11g блокировки никогда не эскалируются, что позволяет повысить параллелизм работы процессов.