Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД - вопросы.docx
Скачиваний:
4
Добавлен:
03.08.2024
Размер:
2.48 Mб
Скачать
  1. Транзакции и блокировки.

Транзакция - это логическая единица работы системы.

Блокировки необходимы для того, чтобы дать различным пользователям возможность одновременно работать с базой данных.

База данных может блокировать строчки с точки зрения выполнения операций чтения и записи. Все транзакции, работающие с какой-либо строчкой, выстраиваются в очередь. После выполнения транзакции блокировка снимается.

. К самым популярным видам блокировок относятся Shared и Exclusive lock. Для простоты можно считать, что Shared lock является блокировкой на запись. Она накладывается в случае выполнения какого-нибудь select'а, причем одна запись может быть вычитана несколькими транзакциями параллельно. Exclusive lock выставляется в том случае, если осуществляется update или delete некоторой строчки. При таком виде блокировки чтение этой строчки осуществить невозможно.

Для обеспечения изоляции может применяться механизм так называемых двухфазных блокировок.Алгоритм состоит из двух фаз (что следует из его названия): установка блокировки и ее снятие.

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

Эскалация блокировок - это процесс, при котором система управления базами данных (СУБД) изменяет уровень блокировки транзакции с более мелкого на более крупный, чтобы уменьшить нагрузку на систему и повысить параллелизм выполнения транзакций.

Например, если в системе есть много транзакций, каждая из которых блокирует отдельные строки данных, то это может привести к большой нагрузке на систему и замедлению выполнения транзакций. В этом случае СУБД может эскалировать блокировки, объединив несколько блокировок в одну более крупную блокировку на уровне страницы, таблицы или даже базы данных. Это позволяет уменьшить количество блокировок и увеличить параллелизм выполнения транзакций.

Однако эскалация блокировок может иметь и негативные последствия. Например, если блокировки эскалируются на более крупный уровень, то это может привести к блокировке большего количества данных, чем это необходимо, и замедлению выполнения транзакций. Поэтому эскалация блокировок должна применяться с учетом конкретных условий системы и оптимальных стратегий управления блокировками.

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

Например, если транзакция A блокирует ресурс R1 и пытается заблокировать ресурс R2, который заблокирован транзакцией B, а транзакция B блокирует ресурс R2 и пытается заблокировать ресурс R1, который заблокирован транзакцией A, то обе транзакции будут заблокированы и не смогут продолжать выполнение.

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

Процесс внесения изменений в БД состоит из последовательности действий:

•выдается оператор начала транзакции;

•выдается оператор изменения данных;

•СУБД анализирует оператор и устанавливает блокировки для его выполнения;

•в случае успешной блокировки оператор выполняется;

•процесс повторяется для всех следующих операторов транзакции;

• выполняется оператор фиксации транзакции.

Соседние файлы в предмете Проектирование баз данных