Что такое транзакции? Системы обработки транзакций
В мире, где все меняется так стремительно, нельзя ни на минуту останавливаться. Это касается и получения новой информации. Неизвестный термин или последняя версия программного продукта – это повод пополнить знания в той или иной сфере. Сегодня мы поговорим о том, что такое транзакции, как это работает.
Введение в терминологию
Разнообразные программные продукты автоматизации бизнес-процессов прочно обосновались на рынке в последние 15 лет. Это требует умения работать с программным обеспечением на разных уровнях взаимодействия: в качестве оператора, программиста, бухгалтера и т.д. Поэтому так важно понимание некоторых механизмов работы программы. Для начала разберемся с таким часто встречающимся и пугающим многих термином, как транзакция. Чаще всего за красивым заимствованным словом скрывается далеко не такое сложное явление, как многие себе представляют, произнося новый термин, пробуя его на слух. Давайте разберемся в том, что такое транзакции.
Определение понятия
Это обозначение используется по отношению к любому продукту, в котором реализована работа с базой данных. Несколько операций, логически объединенных в одно целое и выполняющихся поочередно друг за другом, и есть транзакция. В быту транзакцией можно считать цепочку процедур наподобие "проснулся – умылся – оделся – позавтракал – поехал на работу".
Рассмотрим указанное понятие на примере продуктов 1С. Транзакция – это такая же неделимая последовательность действий. Наглядным образцом может послужить запись о единице товара: открытие нужного справочника, создание нового элемента, заполнение предусмотренных полей. Для того чтобы все эти действия привели к желаемому результату, необходимо выполнять их строго с первого и по последнее. Только при таком условии процедура будет считаться успешной. В противном же случае происходит отмена транзакции.
Рассматриваемые процессы могут быть как автоматическими, то есть предусмотренными в системе, так и дописанными вручную разработчиком после покупки готового продукта с целью сделать последний более удобным для пользователей конкретного предприятия. Кроме того, из автоматического режима, когда поведение системы регулируется встроенными механизмами, транзакции можно перевести в управляемый.
Транзакции в 1С: тонкости встроенного языка
Что такое транзакции в общем случае, нам понятно. Но поскольку каждая компания, занимающаяся разработкой программного обеспечения, делает это по-своему, существуют определенные различия между транзакциями вообще и транзакциями в 1С в частности. Например, вложенные (транзакция внутри транзакции) в 1С не поддерживаются.
С точки зрения синтаксиса операторы встроенного языка достаточно простые. Начало процесса объявляется с помощью специальной процедуры НачатьТранзакцию(). Процедура ЗафиксироватьТранзакцию() используется для записи изменений в ходе выполнения действий. Если в процессе выполнения произошел сбой, есть возможность ОтменитьТранзакцию() для отката совершенных изменений.
Почему использование транзакций предпочтительнее? Потому что код в этих процедурах выполняется намного быстрее. Именно к этому и стремится любой программист. Разница в скорости может быть не так ощутима, если пользователей 1С в офисе 1-2 сотрудника, но ее нельзя не почувствовать, когда речь идет о целых отделах, одновременно выполняющих различную работу в указанной программе.
Подводные камни
Помимо очевидного плюса, заключающегося в серьезном увеличении скорости чтения и записи при работе с базой, у транзакций есть и свой минус. Вернемся к приведенному ранее примеру из жизни. Что такое транзакции, совершаемые не одним человеком, а целой семьей? Каждый пытается попасть в ванную, чтобы умыться раньше, все толпятся на кухне, потому что настало время завтрака. В результате члены семьи недовольны друг другом. В лучшем случае это просто неудачное начало дня, в худшем – опоздание на работу, выговор от начальства, сорванные планы.
В программе происходит то же самое. Если все пользователи начнут одновременно изменять данные в одном и том же документе, какую версию считать последней? Какие данные сохранить раньше? Чтобы не возникало такой путаницы, существует механизм блокировок. Это значит, что пока один пользователь работает над документом, второй стоит в виртуальной очереди и ждет. После успешного завершения либо отката транзакции над документом может работать следующий пользователь.
Быть или не быть управляемым блокировкам?
Понятие транзакции не может считаться полностью рассмотренным без вопроса об избыточных блокировках. Что является большим злом: отсутствие блокировок, приводящее к некорректному процессу чтения и записи с неправильными результатами на выходе, или их слишком большое количество, тормозящее работу целого предприятия?
Самое лучшее решение – управляемые блокировки, являющиеся золотой серединой. Грамотный программист сможет настроить уже существующий механизм под нужды организации так, чтобы действительно важные документы обрабатывались в порядке очереди. По тем же элементам конфигурации, которые не нуждаются в блокировках, можно разрешить свободное редактирование.
Таким образом, своевременный анализ транзакций и правильное отношение к блокировкам позволяет в полной мере использовать гибкость системы "1С:Предприятие" и оптимизировать работу базы, сведя к минимуму временные потери.
К чему приводят избыточные блокировки?
Вопрос отнюдь не риторический. Если убрать нужные блокировки, возникнет путаница и хаос. В базе начнут скапливаться неправильные данные из-за одновременного списания остатков или, наоборот, начисления активов. Но последствия эти такого рода, что выявятся не сразу. Первое время работа будет идти быстро, создавая иллюзию правильности выбора отказа от блокировок. С другой стороны, непродуманно большое количество блокировок сразу вызывает сообщения об ошибках. "Не удается завершить защищенную транзакцию", – предупреждает нас система. Что это значит? Две транзакции взаимно заблокировали друг друга таким образом, что ни одна не может ни завершить начатое, ни провести отмену. Замкнутый круг из "мертвых" транзакций будет висеть в базе до обнаружения, заметно снижая производительность системы.
Лишние операции по отмене действий увеличивают количество записей в журнале. Кроме того, подобная система нежизнеспособна, ведь еще большее увеличение пользователей просто погребет ее под грузом "мертвых" блокировок. Время простоя будет неизменно расти. Как избегать таких ситуаций?
Уровни изоляции – еще один способ не сесть на мель
Говоря о том, что такое транзакции, мы упоминали о подводных камнях. Продолжая аналогию, можно с уверенностью утверждать, что варьирование уровня блокировок – надежный инструмент лоцмана в путешествии по морю 1С. Различают два уровня изоляции: "только чтение, без записи" и "ни записи, ни чтения". В автоматическом режиме выбор недоступен. Но достаточно перевести приложение в управляемый режим, и можно будет ставить "умные" ограничения, выбирая не только важные документы, но и назначая им соответствующий уровень изоляции.
Однако грамотно поставленная работа – это, прежде всего, предотвращение аварийных ситуаций, а не только своевременная ликвидация уже случившихся сбоев. Помощником администратору базы данных послужат системы обработки транзакций. Именно на основании данных о том, как прошли любые операции в системе, были ли они успешно завершены или отменены, можно прогнозировать дальнейшее поведение системы и предотвращать потенциальные угрозы.
Подводим общие итоги
Мы разобрались с определением транзакции, рассмотрели алгоритм выполнения процесса изнутри, ознакомились с разными способами регулирования проведения операций в рамках одной информационной базы.
Как показала практика, механизм непрост, но доступен для понимания и более глубокого изучения даже начинающим программистам и администраторам баз данных. Способы регулирования могут быть еще не доведены до совершенства, а избегать проблем в полностью автоматическом режиме тоже не представляется возможным, но, тем не менее, с каждой новой версией программного обеспечения жизнь разработчика становится легче.