SQL1

       

ТИПЫ БЛОКИРОВОК


Имеется два базовых типа блокировок: распределяемые блокировки и специальные блокировки.

Распределяемые (или S-блокировки) могут быть установлены более чем одним пользователем в данный момент времени. Это дает возможность любому числу пользователей обращаться к данным, но не изменять их. Специальные/исключающие блокировки (или X-блокировки) не позволяют никому, кроме владельца этой блокировки, обращаться к данным. Специальные блокировки используются для команд, которые изменяют содержание или структуру таблицы. Они действуют до конца транзакции. Общие блокировки используются для запросов. Насколько они продолжительны, зависит фактически от уровня изоляции.

Что такое уровень изоляции блокировки? Это то, что определяет, сколько таблиц будет блокировано. В DB2 имеется три уровня изоляции, два из которых можно применить и к распределенным, и к специальным блокировкам, а третий, ограниченный, чтобы использовать эти блокировки совместно. Они управляются командами, поданными вне SQL, так что мы можем обсуждать их, не указывая точного синтаксиса. Точный синтаксис команд связанных с блокировками, различен для различных реализаций.

Последующее обсуждение полезно прежде всего на концептуальном уровне. Уровень изоляции "повторное чтение" гарантирует, что внутри данной транзакции все записи, извлечённые с помощью запросов, не могут быть изменены. Поскольку записи, модифицируемые в транзакции, являются субъектами специальной блокировки, пока транзакция не завершена, они не могут быть изменены в любом случае. С другой стороны, для запросов повторное чтение означает, что вы можете решить заранее, какие строки вы хотите заблокировать и выполнить запрос который их выберет. Выполняя запрос, вы имеете гарантию, что никакие изменения не будут сделаны в этих строках до тех пор, пока вы не завершите текущую транзакцию.

В то время как повторное чтение защищает пользователя, который поместил блокировку, оно может одновременно значительно снизить производительность. Уровень указателя стабильности предохраняет каждую запись от изменений на время, когда она читается, или от чтения на время её изменения.


Второй случай это специальная блокировка, и она применяется, пока изменение не завершено или пока оно не отменено (т.е. на время отката изменения).

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

Третий уровень изоляции DB2 это уровень "только чтение". "Только чтение" фиксирует фрагмент данных; хотя на самом деле он блокирует всю таблицу. Следовательно, он не может использоваться с командами модификации. Любое содержание таблицы как единого целого в момент выполнения команды будет отражено в выводе запроса. Это не обязательно, как в случае с уровнем указатель стабильности. Блокировка "только чтение" гарантирует, что ваш вывод будет внутренне согласован, если, конечно, нет необходимости во второй блокировке, не связывающей большую часть таблицы с уровнем "повторное чтение". Блокировка "только чтение" удобна тогда, когда вы делаете отчёты, которые должны быть внутренне согласованы, и давать доступ к большинству или ко всем строкам таблицы, не связывая базу данных.


Содержание раздела