Upload
helen-kopteva
View
48
Download
0
Embed Size (px)
Citation preview
Транзакция
Транзакция – это неделимая с точки зрения воздействия на базу данных, последовательность операций манипулирования данными, выполняющаяся по принципу: «или все, или ничего».
Ошибки которые могут произойти в рамках транзакции подразделяются на:• Не восстановимые (система откатывает транзакцию назад и прекращает свою работу)• Восстановимые (система в принципе остается работоспособной)Восстановимые ошибки в свою очередь делятся на:• Ошибки связанные с базой данных (в этом случае в обязательном порядке будет
произведен откат транзакции)• Ошибки не связанные с базой данных (разработчик может проанализировать эту
ошибку в конструкции «Попытка/Исключение» и решить будет транзакция продолжаться или будет прервана).
Система осуществляет неявный вызов транзакций при выполнении любых действий, связанных с изменением данных, хранящихся в информационной базе.
Режим работы с данными вне транзакции допускает только операции чтения данных, т.к. выполняется «не глядя» на блокировки (например, получение данных отчетом).
Наряду с этим разработчик может использовать возможность определять транзакции в явном виде, с помощью средств встроенного языка.
Конкурентный ресурс
«Конкурентный ресурс», это некий ресурс системы (остаток товара на складе, величина задолженности контрагента и т.п., который используется в системе для реализации прикладной логики. По значению данного ресурса система с точки зрения прикладной логики принимает решение: фиксировать данную транзакцию или нет. Для обеспечения этой логики нужно обеспечить «неизменность» значения «конкурентного» ресурса на время течения прикладной транзакции.
Уровни изоляции транзакций
• «Read Uncommited» - так называемое «грязное чтение». Используется при чтении данных. В результат чтения могут войти данные внесенные (измененные) еще не зафиксированной транзакцией.
• «Read Commited» - решает проблему грязного чтения. В результат чтения входят наиболее актуальные данные. Результат не содержит не зафиксированных изменений.
• «Repeatable Read» - воспроизводимое чтение. При установке данного уровня изоляции на прочитанные данные накладывается блокировка, препятствующая их изменению из другой транзакции. Т.е. если данные будут прочитаны в начале транзакции (и установлен такой уровень изоляции), то при чтении данных в конце транзакции они будут точно такими же.
• «Serializable» - решает так называемую «фантомную» проблему. Проблема заключается в том, что когда в начале транзакции считывается некий набор данных, то если произвести чтение этого набора в конце транзакции он будет содержать лишние записи.
Повышение уровня блокировкиСуть данной ситуации: две транзакции первоначально параллельно накладывают на одни и те же данные разделяемую блокировку, а потом пытаются разделяемую переключить на исключительную. В результате возникает взаимоблокировка.
Начало транзакций
Чтение данных Чтение данныхРазделяемая Разделяемая
Обработка данных Обработка
данныхЗапись данных
Исключительная
Запись данных
Исключительная
Взаимоблокировка
|ДЛЯ ИЗМЕНЕНИЯ| РегистрНакопления.ОстаткиНоменклатуры.Остатки";
Начало транзакций
Чтение данных Чтение данныхОбработка
данных
Обработка данных
Запись данных
Исключительная
Запись данных
Исключительная
Обращение к данным в разном порядке
Начало транзакций
Чтение данных(ост.) Чтение данных
(рез.)
Исключительная(ост)
Исключительная(рез.)
Чтение данных(рез.) Чтение данных
(ост.)
Взаимоблокировка
Другие причины, сказывающиеся на параллельности работы системы:• Неоптимальное написание (работа) запросов• Большая вложенность подзапросов, соединения с подзапросами• Несоответствие индексов и условий запроса• Некорректное использование параметров виртуальных таблиц• Отсутствие функции ВЫРАЗИТЬ для полей составного типа• Получение лишних полей через точку
Видео канал KoderLine: goo.gl/eqGWK1
Совместное использование автоматического и управляемого режимовРежим существующей транзакции
Режим начинаемой транзакции Результат
Автоматический Автоматический Начинаемая транзакция будет выполнена в автоматическим режиме
Управляемый Управляемый Начинаемая транзакция будет выполнена в управляемом режиме
Автоматический Управляемый Начинаемая транзакция будет выполнена в автоматическим режиме
Управляемый Автоматический Будет вызвана исключительная ситуация
Записывать выбранныеСуть значения «Записывать выбранные» в том, что записываются только те наборы, для которых вы явно это укажите. У коллекции «Движения.ИмяРегистра» появилось свойство «Записывать». При выходе из обработки проведения в регистры сбрасываются данные только тех коллекций, у которых свойство «Записывать» установлено в значение «Истина».
Движения.ОстаткиТоваров.Записывать = Истина;
Также у свойства документа «Движения» появился метод «Записать()». Он «принудительно сбрасывает» данные в регистры только по тем наборам, у которых свойство «Записывать» установлено в значение «Истина».
Движения.Записать();
Важно отметить, что метод «принудительной» записи, который использовался ранее, значение флага «Записывать» не сбрасывает.
Движения.ОстаткиНоменклатуры.Записать();
Блокировать для изменения
Движения.ОстаткиТоваров.БлокироватьДляИзменения=Истина;
На записываемые данные в момент записи будет установлена исключительная блокировка. Важно понимать, что блокирование данных происходит именно в момент записи и то, что указанное свойство работает в «тандеме» с режимом разделения итогов регистров накопления и бухгалтерии
Прямые контактыАндрей БербекаРуководитель проектного направленияТелефон:+7 (495) 135-22-96Email:[email protected]:andrijberbeka
Игорь ШлепановРуководитель Департамента по работе с корпоративными клиентамТелефон:+7 (495) 135-22-96Email:[email protected]:igor_shlepanov
Владимир КостюкРуководитель отдела разработкиEmail:[email protected]:vkostyuk.koderline
Юлия ЗореваРуководитель коммерческой службыEmail:[email protected]:uzoreva-koderline