МАСТЕРСКАЯ

ОБСЛУЖИВАНИЕ 1С УДАЛЕННО по Москве, СПб и всей России

ОБНОВЛЕНИЕ И ДОРАБОТКА КОНФИГУРАЦИЙ

КОНСУЛЬТАЦИИ ПО ВЕДЕНИЮ УЧЕТА В 1С


СТАТЬИ


1С:Предприятие 8.x

5 практических рекомендаций по решению проблем избыточных блокировок в 1С

Татьяна Роженюк
, 4 апреля 2011

Решение проблем блокировок транзакций на крупных внедрениях


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

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

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

ПРИЧИНЫ ВОЗНИКНОВЕНИЯ БЛОКИРОВОК ТРАНЗАКЦИЙ

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

Пример 1: покупка билета на самолет или поезд. Предположим, мы озвучили свои пожелания кассиру. Кассир сообщает нам наличие свободных мест, из которых мы можем выбрать наиболее понравившееся (если их несколько, конечно). Пока мы выбираем и подтверждаем своё согласие с предлагаемым вариантом, эти места не могут быть проданы кому-либо еще, т.е. временно «блокируются». Если бы они не блокировались, то к моменту подтверждения могла бы быть ситуация, когда выбранные нами билеты уже проданы. А в этом случае цикл выбора может быть непрогнозируемого количества повторений. Пока выбираем места, а их уже продали!.. Пока выбираем другие, и их уже нет...

Пример 2: покупка чего-либо в магазине или на базаре. Подошли мы к прилавку, выбрали самое красивое яблоко из сотни доступных. Выбрали и полезли в карман за деньгами. Как будет выглядеть, если в тот момент, пока мы считаем деньги, именно выбранное нами яблоко будет продано подошедшему позже нас покупателю?

Таким образом, сама по себе блокировка – это нужное и полезное явление. Именно благодаря блокировке мы гарантируем выполнение действий за один этап. А к негативу чаще всего приводит не самая удачная реализация программного обеспечения, когда, например:

  • блокируется избыточное количество объектов (билетов, яблок);
  • время блокировки необоснованно растягивается.

ИЗБЫТОЧНЫЕ БЛОКИРОВКИ В ТИПОВЫХ КОНФИГУРАЦИЯХ 1С

На крупных проектах, как правило мы используем «1С:Предприятие». Поэтому практические рекомендации решения проблем блокировок мы попробуем описать на примере связки «1С:Предприятие»+MS-SQL.

8-е поколение 1С:Предприятия обеспечивает очень и очень неплохую параллельность использования. Одновременно с одной конфигурацией (то есть на одной базе) при нормальных серверах и каналах связи может работать огромное количество пользователей. Например, сотни кладовщиков оформляют выдачи или поступления товаров, экономисты одновременно считают затраты на оплаты труда по различным подразделениям, расчетчики проводят расчет и начисление зарплаты и т.д.

Но есть причина, из-за которых бытует мнение об обратном – миф о том, что при интенсивном одновременном использовании работать с решениями на базе 1С:Предприятия некомфортно или невозможно. Ведь как только типовые решения под 1С:Предприятие начинают использовать сотни пользователей на промышленных масштабах, всё чаще на экране появляется окошко с гордой надписью: «Ошибка при вызове метода контекста (Записать): Конфликт блокировки при выполнении транзакции: ...» и дальше в зависимости вида применяемого SQL-сервера что-то типа «Microsoft OLE DB Provider for SQL Server: Lock request time out period exceeded. ...».

Сообщение об ошибке, вызванной блокировкой транзакций

Почти все типовые решения в предлагаемой «из коробки» реализации настроены на автоматический режим управления блокировками. «Автоматический» тут можно воспринимать как «параноидальный». На всякий случай при проведении любого документа блокируем всё, что хоть как-то с ним может быть связано. Вот и получается, что когда один пользователь что-то проводит (а иногда и просто записывает), остальные могут только ожидать.

Выскажу свое мнение, почему 1С решила не настраивать свои типовые решения под высокую параллельность использования. Трудозатраты на такую доработку не высоки – несколько «человекомесяцев», что по масштабам 1С не значимо. Мне кажется причина в другом.

Во-первых, такая доработка значимо усложняет обработчики проведения всех документов. А значит для тех потребителей, кто использует 1С на небольших задачах, без какого-либо выигрыша будет только недостаток – сложность доработки типовой конфигурации усложнится. Статистика в то же время подсказывает, какая категория клиентов является основной кормушкой для 1С...

Вторая причина зарыта в типовых базовых настройках SQL-серверов, например, MS-SQL, который всё еще используется чаще других. Так уж повелось, что приоритеты в настройках отданы экономии оперативной памяти серверов, а не сокращению блокировок. Это приводит к тому, что при необходимости заблокировать несколько строк SQL-сервер принимает «экономное» для памяти и процессора решение – заблокировать сразу всю таблицу!..

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

РЕКОМЕНДАЦИИ ПО УСТРАНЕНИЮ ИЗБЫТОЧНЫХ БЛОКИРОВОК ДЛЯ 1С:ПРЕДПРИЯТИЯ

Что же делать, если решение проблем избыточных блокировок настолько важно?

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

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

Каждая из рекомендаций достойна отдельного внимания и приведена в отдельной статье:

  1. Если используемая СУБД или система разработки (например, 1С:Предприятие) по умолчанию использует автоматический режим блокировки данных, откажитесь от автоматического управления блокировками. Настройте правила блокировок самостоятельно, опишите критерии блокировки целых таблиц или отдельных строк.
  2. При разработке программы всегда, когда это возможно, обращайтесь к таблицам в одном порядке.
  3. Постарайтесь не писать в одну и ту же таблицу несколько раз в пределах одной транзакции. Если это сложно, то хотя-бы минимизируйте промежуток времени между первой и последней операцией записи.
  4. Проведите анализ возможности отключения эскалации блокировок на уровне SQL-сервера.
  5. Внятно информируйте пользователей о причинах невозможности выполнения каких-либо действий, если они обусловлены блокировками. Давайте доступные и понятные рекомендации, что делать дальше.

Если внимательно посмотреть на рекомендации, то становится понятным, что подобная отработка уместна не только для 1С:Предприятия, но для любых систем. Абсолютно не важно на каком языке они написаны и с каким работают сервером БД. Большинство рекомендаций имеют универсальный характер, а потому одинаково справедливы и при использовании 1С:Предприятия, и для «самописных» программ или других «коробочных» ERP-систем.

P.S. А Вы знали о том, что мы предлагаем профессиональную помощь с обновлением 1С по лучшей цене?

Тэги для поиска:
  • Блокировки транзакций
  • Устранение блокировок
  • Блокировки 1С
  • Блокировка
  • Конфликт блокировок
  • Конфликт блокировок при выполнении транзакции

По причине полной загрузки специалистов
до 08.06.2018 мы не принимаем заказов,
требующих оперативного выполнения.

Мы искренне благодарны нашим клиентам
за то, что обеспечивают нас непрерывным
потоком интересных заданий.

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