SQL запросы. Проблемы с выполнением параллельных SQL транзакций.

Поделиться
HTML-код
  • Опубликовано: 13 дек 2016
  • Рубрика SQLite на сайте: zametkinapolyah....
    Текстовая версия: zametkinapolyah...
    Паблик блога в ВК: zametki...
    Тематическая группа в ВК: zametki_bd
    Помощь проекту:
    WMR: R288272666982
    WMZ: Z293550531456
    Яндекс.Деньги: 410011531129223
    Ранее мы упоминали о том, что транзакции должны быть изолированы, а также мы сказали, что полная изоляция транзакции - очень дорогая операция, поэтому было принято разделение по степени изолированности. Чем выше уровень изолированности транзакции, тем выше точность и согласованность данных, но минус в том, что может уменьшится число параллельных транзакций, которые выполняются СУБД.
    Также при выполнении параллельных транзакций в базе данных могут возникать некоторые проблемы.
    1. Потерянное обновление (lost update). Если две или более, запущенных параллельно транзакции пытаются модифицировать одни и те же данные, то все вносимые изменения, кроме первой транзакции, будут потеряны.
    2. Неповторяющееся чтение (non-repeatable read). При повторном чтении в рамках одной транзакции ранее прочитанные данные оказываются изменёнными.
    3. Грязное чтение (dirty read). Данная проблема возникает в том случае, когда вы делаете выборку данных, которые были изменены транзакцией, но в дальнейшем произойдет откат транзакции и эти изменения не подтвердятся.
    4. Фантомное чтение (phantom reads). Представим, что у нас запущено две транзакции, первая лишь читает данные из базы данных, вторая манипулирует данными, например: добавляет строки, удаляет данные или их модифицирует. Допустим, что в первой транзакции условия выборки данных всегда одинаковые, но результаты могут оказаться разными, так как вторая транзакция изменяет данные в таблицах.
    Справиться с подобными проблемами при выполнении параллельных транзакций помогают блокировки и изолированность транзакций.

Комментарии •