Главная страница
Навигация по странице:

  • Потеря изменений

  • Неповторяемое чтение

  • Лекции и практики (1). Курс лекций и материалы для практических занятий


    Скачать 1.01 Mb.
    НазваниеКурс лекций и материалы для практических занятий
    Дата17.03.2023
    Размер1.01 Mb.
    Формат файлаdocx
    Имя файлаЛекции и практики (1).docx
    ТипКурс лекций
    #996812
    страница31 из 75
    1   ...   27   28   29   30   31   32   33   34   ...   75

    Взаимовлияние транзакций


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

    В общем случае взаимовлияние транзакций может проявляться в виде:

    • потери изменений;

    • чернового чтения;

    • неповторяемого чтения;

    • фантомов.

    Потеря изменений могла бы произойти при одновременном обновлении двумя и более транзакциями одного и того же набора данных. Транзакция, за- кончившаяся последней, перезаписала бы результаты изменений, внесённых предыдущими транзакциями, и они были бы потеряны.

    Представим, что одновременно начали выполняться две транзакции: транзакция 1 UPDATE СОТРУДНИКИ

    SET Оклад= 39200

    WHERE Номер= 1123;

    транзакция 2 – UPDATE СОТРУДНИКИ

    SET Должность= "старший экономист" WHERE Номер= 1123;

    Обе транзакции считали одну и ту же запись (1123, "Рудин В.П.", "экономист", 28300) и внесли каждая свои изменения: в бухгалтерии изменили оклад (тран- закция 1), в отделе кадров – должность (транзакция 2). Результаты транзакции 1 будут потеряны (рис. 6.2).

    1123

    Рудин В.П.

    экономист

    28300




    1123

    Рудин В.П.

    экономист

    39200



    1123

    Рудин В.П.

    старший экономист

    28300


    Рис. 6.2. Недопустимое взаимовлияние транзакций: потеря изменений


    !
    СУБД не допускает такого взаимовлияния транзакций, при котором возможна потеря изменений.


    Ситуация чернового чтения возникает, когда транзакция считывает из-

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

    При повторяемом чтении один и тот же запрос, повторно выполняемый одной транзакцией, возвращает один и тот же набор данных (т.е. игнорирует изменения, вносимые другими завершёнными и незавершёнными транзакция- ми). Неповторяемое чтение является противоположностью повторяемого, т.е. транзакция "видит" изменения, внесённые другими (завершёнными!) транзак- циями. Следствием этого может быть несогласованность результатов запроса, когда часть данных запроса соответствует состоянию БД до внесения измене- ний, а часть – состоянию БД после внесения и фиксации изменений.

    Фантомы – это особый тип неповторяемого чтения. Возникновение фан- томов может происходить в ситуации, когда одна и та же транзакция сначала производит обновление набора данных, а затем считывание этого же набора. Если считывание данных начинается раньше, чем закончится их обновление, то в результате чтения можно получить несогласованный (не обновлённый или частично обновлённый) набор данных. При последующих запросах это явление пропадает, т.к. на самом деле запрошенные данные после завершения обновле- ния будут согласованными в соответствии со свойствами транзакции.

    Для разграничения двух пишущих транзакций и предотвращения потери изменений СУБД используют механизмы блокировок или временных отметок, а для разграничения пишущей и читающих транзакций – специальные правила поведения транзакций, которые называются уровнями изоляции транзакций.
    1   ...   27   28   29   30   31   32   33   34   ...   75


    написать администратору сайта