8
Блокировки
Блокировки строк
чтение никогда не блокирует строки
изменение строк блокирует их для изменений, но не для чтений
Блокировки таблиц
запрещают изменение или удаление таблицы, пока с ней идет работа
запрещают чтение таблицы при перестроении или перемещении
и т. п.
Время жизни блокировок
устанавливаются по мере необходимости или вручную
снимаются автоматически при завершении транзакции или при откате
к точке сохранения
Что же дает многоверсионность? Она позволяет обойтись
необходимым минимумом блокировок, тем самым увеличивая
производительность системы.
Основные блокировки устанавливаются на уровне строк. При этом
чтение никогда не блокирует ни читающие, ни пишущие транзакции.
Изменение строки не блокирует ее чтение. Единственный случай, когда
транзакция будет ждать освобождения блокировки — если она
пытается менять строку, которая уже изменена другой, еще не
зафиксированной транзакцией.
Блокировки также устанавливаются на более высоком уровне,
в частности, на таблицах. Они нужны для того, чтобы никто не смог
удалить таблицу, пока другие транзакции читают из нее данные, или
чтобы запретить доступ к перестраиваемой таблице. На практике
удаление и перестроение таблиц выполняются редко, поэтому обычно
не вызывают проблем. Однако нужно учитывать, что перестроение
таблицы происходит неявно при некоторых изменениях ее структуры
и полностью блокирует доступ к таблице и ее индексам. Подробно
блокировки рассматриваются в модуле «Блокировки» курса DBA2.
Все необходимые блокировки устанавливаются автоматически
и автоматически же снимаются при завершении транзакции. Но если
блокировка была получена после установки точки сохранения, она
будет снята немедленно в случае отката к этой точке.
Можно также установить и дополнительные пользовательские
блокировки; необходимость в этом возникает не часто.