Оптимизация без оптимизации: как мы ускорили 1С в 10 раз без трудоемкой оптимизации запросов и алгоритмов. Практический опыт
База данных - HighLoad оптимизация
Сегодня я хочу поговорить об оптимизации 1С, о том, как можно решить проблему ожиданий на блокировках при работе системы. Я буду рассказывать достаточно простые вещи, но они, возможно, позволят кому-то сэкономить время, силы и деньги.
Когда я стал работать в компании-пользователе, для меня наиболее критично стало не то, насколько красиво и правильно сделано мое решение с точки зрения рефакторинга, а то, как быстро я смогу решить проблему бизнеса, и какой эффект это принесет. Как написан мой код – бизнесу зачастую неважно.
Я расскажу о нашем опыте, как мы у себя оптимизировали 1С на тех участках, где она «тупила» и «тормозила», и как мы сделали это без оптимизации запросов, алгоритмов и т.д.
Оптимизация «по учебнику»

Напомню классический подход к оптимизации.
Допустим, у нас «тупит» и «тормозит» 1С. Мы это видим по системам мониторинга, либо нам говорят об этом пользователи. Что мы, как специалисты 1С, должны делать «по учебнику»?
- Мы находим узкие места, где «болит» больше всего – например, система начинает «висеть», когда идет массовый расчет себестоимости, или начисление зарплаты, или массовый ввод реализации, как это было у нас.
- Когда найдены узкие места, мы должны посмотреть, что можно оптимизировать, чтобы ускорить работу системы.
- Возможно, нужно оптимизировать запросы, чтобы они захватывали меньше данных,
- Или переписать алгоритмы с транзакциями, чтобы они чаще отдавали данные, либо обрабатывали более короткий промежуток времени.
- Если это не помогает, мы пробуем нарастить серверное оборудование.
Иногда все это приводит к положительным результатам. Но я сейчас хочу привести примеры того, как мы ускорили систему, не используя классические подходы.

Мы у себя в компании столкнулись с тем, что 1С в некоторые моменты времени «зависала» и «тормозила». Руководство потребовало решить эту проблему, но:
- У нас в команде не было серьезных специалистов, которые профессионально, на ежедневной основе занимались бы вопросами оптимизации.
- Для нас было трудоемко решать проблему с учетом классических подходов;
- Требовалась определенная квалификация, которой у нас не было, либо было необходимо привлекать других специалистов;
- При этом мы не могли гарантировать, что наши усилия дадут какой-либо эффект. Например, если мы оптимизируем алгоритмы проведения реализации, из-за которых у нас очень много ожиданий на блокировках, то, может быть, мы получим какое-то ускорение в разы, а может, это даст лишь небольшой прирост.
Несколько слов о компании

Пару слов о нашей компании.
Компания «Ароса» – мы поставляем продукты питания в HoReCa, (в кафе, бары, рестораны), в государственные учреждения, в ритейл. Работаем в Москве, Питере, Сочи.
Отгружаем:
- Порядка 100 тонн товаров в сутки, сейчас даже больше.
- В день обрабатываем порядка 800 и более заказов – суммарно во всех заказах примерно 4000 строк.
- В основном это штучная отгрузка.
Я в нашей компании отвечаю за автоматизацию складов, т. е. непосредственно за нашу WMS-систему.
Основная учетная система у нас – это «Управление торговлей». А на складе мы используем WMS «Кортес». В мире 1С в качестве WMS-системы наибольшее распространение получило решение от компании Axelot, но кроме него есть и другие WMS-решения на 1С, одно из них используем и мы.
Кейс 1. Обработка заказов
Первое узкое место, про которое я расскажу – это процесс обработки заказов на складе.
У нас процессы на складе выстроены следующим образом:
- целый день склад работает «на вход» – принимаются товары от поставщиков;
- потом в систему вносятся заказы, принятые в течение рабочего дня;
- ночью осуществляется их сборка;
- утром машины развозят заказы по клиентам.
И каждый день в 18:00-19:00 при достижении определенных значений количества заказов в сутки мы стали сталкиваться с «зависаниями» системы – в те один-два часа, когда шла основная обработка заказов операторами, работать в системе было практически невозможно.

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

И из-за того, что большому количеству заказов требовался доступ примерно к одним и тем же данным, возникала проблема – шла конкуренция за данные.
Например, какой-то товар (допустим, говядина), лежит в ячейке X в качестве свободного остатка, а эта говядина нужна в каждом четвертом заказе. И, поскольку большое количество заказов проводилось параллельно, то несколько сеансов пытались конкурировать за одни и те же данные – возникало ожидание на блокировках.
Операторы вынуждены были играть в игру «Я зарезервирую этот рейс с пятой попытки», потому что реализовано все это было не идеально. Когда оператор нажимал кнопку «Зарезервировать товар по рейсу», у него появлялись песочные часы – система начинала обрабатывать первый, второй, третий заказ, и, допустим, на четвертом заказе возникало ожидание на блокировке – пользователю выдавалась ошибка, что произошел таймаут. Попытка номер два, пробуем еще раз и т.д.
Мы внимательно посмотрели на эту ситуацию и увидели, что если бы резервирование производилось не параллельно, если бы все одновременно не пытались пройти в одну дверь, то и проблемы бы не было. Если бы наши пользователи обрабатывали заказы последовательно, они бы все успевали в отведенное время. А так основное время уходило на ожидания на блокировках и на попытки повторных обработок.

Это скриншот одной из систем мониторинга, которые мы используем. Здесь показывается суммарное время ожидания по блокировкам в течение суток. Видно два ярких пика.
- Первый пик – это 17:00-19:00 часов, когда операторы обрабатывают первую порцию заказов.
- И второй пик ночью, когда они массово начинают обрабатывать вторую порцию заказов.

Что мы сделали? Мы немного поменяли бизнес-логику системы, чтобы заказы перестали обрабатываться и резервироваться параллельно. Я допускаю мысль, что в алгоритмах можно было что-то оптимизировать, но мы решили этим не заниматься, мы просто сделали так, что все заказы стали обрабатываться последовательно одним фоновым заданием.
Как это выглядит технически?
- Когда оператор нажимает кнопку «Зарезервировать рейс», его сеанс никакого резервирования не выполняет – просто делается запись в служебный регистр сведений, что по этому рейсу необходимо сделать резервы.
- Стартует фоновое задание, которое начинает выполнять все необходимые действия.
- Когда другой оператор параллельно в это же время делает те же действия по своим рейсам, его рейс также встает в очередь.
- И потом, когда фоновое задание закончит работу с первым рейсом, оно переходит к обработке второго рейса. Когда закончит второй, перейдет к третьему, если он есть в регистре. Если третьего нет, то оно завершается.
Таким образом, заказы перестали обрабатываться параллельно.

На скриншоте показано, как все это выглядит интерфейсно в используемом у нас решении «Кортес» на толстых формах. Сейчас все это происходит примерно следующим образом:
- Когда пользователь нажимает кнопку «Зарезервировать товар», у него напротив определенного рейса появляется значок часиков. Это означает, что данный рейс отправлен в работу.
- При этом интерфейс у пользователя не «замерзает», он может дальше строить какие-то отчеты, отправить в работу еще какой-то рейс, но его сеанс больше не занимается этой работой.
- Когда рейс будет отработан, эти часики уйдут.
Если в процессе работы фоновое задание получит какие-то ошибки, допустим, по определенному заказу не хватает товара, или в документе неправильно заполнены реквизиты, и надо выдать какую-то диагностику пользователю, то в отдельном регистре сведений, где мы ведем протокол отправки рейсов, будут сделаны записи. Любые пользователи смогут посмотреть, были проблемы по рейсу или нет.

Технически мы эту задачу решили достаточно быстро, не занимаясь при этом оптимизацией алгоритмов. В результате:
- Ожидания в пиковые периоды практически ушли;
- Нервозность склада снизилась;
- Скорость обработки рейсов существенно выросла;
- И что самое важное для нас и бизнеса – все это было сделано просто и быстро.
Кейс 2. Отгрузка рейсов

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

В итоге мы реализовали отложенное проведение.
- С точки зрения бизнес-логики для нас было не принципиально, чтобы в 7:00-8:00 утра, когда идет погрузка машин, товар был правильно списан по регистрам. Для нас было главное, чтобы у документов был статус «Отгружен», и пользователи в своих формах видели, что они такие-то документы обработали. Поэтому, когда кладовщики отгружают рейсы, документы заказов не перепроводятся, у них просто меняется реквизит статуса на «Отгружен».
- При этом делается запись в регистр сведений «Документы к проведению», что такие-то рейсы, такие-то заказы надо потом допровести.
- И потом, спустя несколько часов, когда нагрузки на систему нет, стартует фоновое задание, которое пробегает этот регистр, смотрит эти рейсы, эти заказы, которые надо обработать, и допроводит их.

По сути, мы реализовали отложенное проведение. Ничего нового здесь нет, эта идея уже много лет работает и в УТ 10-ой редакции, и в УПП.
Иногда внедренцы забывают, что подобные проблемы можно решить таким нехитрым приемом. Но мы в очередной раз решили проблемы с ожиданиями и с тем, что 1С «тупит» и «тормозит», и сделали это достаточно быстро.
Кейс 3. Создание и проведение реализаций

Третья проблема, которую мы решали у себя подобным подходом – это проблема непосредственно в нашей офисной базе УТ.
Пока мы работали на складе, делали жизнь складских работников прекрасной и удивительной, в нашей офисной УТ тоже возникли проблемы, и наши 1С-специалисты в офисе, которые отвечают за УТ, попросили нас разобраться, что же происходит у них.
Мы увидели, что в офисе тоже почему-то возникает своя суточная сезонность – определенное временное окно в начале смены (порядка двух-трех часов), когда продажники регистрируют основную массу заказов.
Телемаркетологи, продажники, менеджеры по продажам звонят клиентам, общаются с ними и вносят заказы. Система в это время начинает жутко «тормозить», вплоть до того, что не формируются отчеты.
Процесс оформления заказов у нас достаточно несложный, его можно увидеть на слайде.
- В УТ продажник оформляет документ «Заказ», с помощью подбора подбирает свободные остатки, и проводит документ.
- При проведении заказа система проверяет, хватает ли свободных остатков, нет ли долгов по дебиторке, все ли условия по оплате выполнены. И, если все хорошо, заказ проводится. Если заказ проведен, то значит, товара клиенту хватит.
- Далее продажник переводит в статус «К отгрузке», вводит на его основании:
- реализацию;
- счет-фактуру;
- наш служебный документ «Распоряжение на склад», который с помощью обменов потом летит к нам в WMS.
Все эти операции, особенно оформление реализации, самому продажнику не нужны. Он уже сделал все, что нужно, чтобы принять заказ – если заказ провелся, то реализация не провестись не может. Она может не провестись только по каким-то техническим проблемам, которые не касаются этого заказа.
Поэтому все эти действия для продажника были, с одной стороны, лишними, просто их кто-то должен был делать. Но, с другой стороны, все проблемы возникали как раз при проведении реализации. Точнее, проблемы были из-за того, что несколько продажников одновременно параллельно проводили реализации, и из-за этого возникали блокировки.
Мы посмотрели на эту проблему и решили сделать так, чтобы реализации создавались и проводились в отдельном потоке фоновым заданием.
Работа продажника сейчас выглядит следующим образом:
- Он оформляет заказ, и если тот проводится, он переводит его в статус «К отгрузке». На этом работа продажника заканчивается. Он переходит к следующему клиенту. Никакие документы он больше не регистрирует.
- При этом, в системе в соответствующий регистр сведений пишется, что появился заказ, по которому надо бы создать реализацию.
- И раз в несколько минут регламентное задание проверяет, есть ли что-то в этом регистре, и если есть, то оно начинает по этим заказам создавать реализации и делает это «в один поток».
Никакой конкуренции за ресурсы между несколькими сеансами не происходит. Реализация создается немного с запозданием, но это не критично. Пользователи оформили заказ и стали работать со следующим клиентом. Реализация все равно через несколько минут будет создана, и все другие задачи будут выполнены.

Результат в данном случае тоже был похожий:
- Мы решили проблему ожидания на блокировках.
- Пропускная способность УТ в этот период увеличилась.
- Пользователи сменили «гнев на милость».
Главное, что с того момента, как у них все «накипело», и они по управленческой структуре дошли до верха, сказали нам: «Сделайте что-нибудь, вы же 1С-ники, вы же программисты», прошло достаточно мало времени до того, как мы поняли, в чем проблема, и решили ее – проверили, протестировали.
Итоги

Подведу небольшой итог.
Если у вас возникают подобные проблемы, но нет возможности делать оптимизацию, а результат хочется получить быстрее и меньшей кровью, посмотрите:
- Возможно, вы сможете перенести эти операции на другое время, чтобы они выполнялись, когда система не будет сильно нагружена;
- Может вам удастся организовать для этих операций один поток, чтобы исключить причину блокировок.
- Конечно, купить железо за 1000 долларов – это более правильно, но нам надо получить результат быстрее и с максимальным эффектом. Если логика при этом не пострадает, то почему бы и нет.
Данная статья написана по итогам доклада, прочитанного на конференции INFOSTART EVENT 2017 COMMUNITY.
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
HighLoad оптимизация Разработчик 1С 8.3 1С:ERP Управление предприятием 2 Бесплатно (free)
Использование оператора «В» для полей или данных составного типа (например, Регистратор) может приводить к неочевидным проблемам.
10.11.2025 15885 ivanov660 48
HighLoad оптимизация Разработчик 1С:Предприятие 8 1C:ERP Бесплатно (free)
Приведем примеры использования различных в динамических списках и посмотрим, почему это плохо.
18.02.2025 16491 ivanov660 39
HighLoad оптимизация Системный администратор Разработчик 1C:ERP Бесплатно (free)
Не всегда индексирование с дополнительным упорядочиванием полезно.
04.02.2025 15134 ivanov660 21
HighLoad оптимизация Разработчик Россия Бесплатно (free)
А вы знали, что сервер 1С при соединении с базой на сервере PostgreSQL самостоятельно устанавливает некоторые параметры? Это важно знать при настройке сервера и отладке долгих запросов. Предлагаю разобраться.
27.08.2024 10402 soulner 10
HighLoad оптимизация Технологический журнал Системный администратор Разработчик Бесплатно (free)
Обсудим поиск и разбор причин длительных серверных вызовов CALL, SCALL.
24.06.2024 19126 ivanov660 13
HighLoad оптимизация Разработчик 1С:Предприятие 8 Бесплатно (free)
Метод очень медленно работает, когда параметр приемник содержит намного меньше свойств, чем источник.
06.06.2024 24976 Evg-Lylyk 73
HighLoad оптимизация Механизмы платформы 1С Системный администратор Разработчик Стажер 1С:Предприятие 8 Бесплатно (free)
Сравним «Регистры сведений» с «Сервисами интеграции» и узнаем, кто быстрее!
28.03.2024 14632 dsdred 27
HighLoad оптимизация Разработчик 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)
Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.
13.03.2024 14616 spyke 29
как бы вы хорошо не ускорили ненужную работу, она все равно зря..
— Позиция лентяя, — восхищённо сказал я. — Уважаю!
— Это чистая логика! — возмутился Михаил. — Приступив к ненужной работе, очень трудно понять её ненужность. В итоге больше времени тратится на выполнение излишних действий, чем на выработку правильного регламента работ.
— Логичная лень! — Я всплеснул руками, вскочил из-за стола. — Михаил, ты придал моей жизни новый смысл. Давай думать.
при увольнении каждого отдельного сотрудника выполнялось действие заполнить документ начислений (по зарплате)
и в документ попадали все сотрудники компании с расчетом
затем все записи сотрудников удалились и оставалась только одна запись по увольняемому
компания жалуется на долгое заполнение
пример понятен?
(8)Почему ждать? Компания уже работает и в процессе работы для себя решает куда и как направить ресурсы на создание новых/исправление старых бизнес процессов... иногда переделка стандартной конфигурацией может стать дороже чем написание своей конфигурации с нуля.
В том то и дело, что иногда, купить типовую конфу куда менее рискованнее и менее трудозатратно, чем писать с нуля, подумайте еще о том, кто в дальнейшем будет ее поддерживать (и не кривые ли руки у создателя самописки).
Но если вы большая компания со штатом методистов и "1с-ников", то создавая новый бизнес проект у вас есть выбор, исправлять стандартную конфигурацию или писать свою.
Немного отвлекусь от 1С с конкретным личным примером.
В этом году, запуская сеть табачных магазинов, пришли к выводу, что POS система АТОЛ не решает некоторые, жизненно важные задачи. Было принято решение разработать свою POS систему, работающая автономно под linux с real-time ретрансляцией событий в WEB + масштабный обмен 1С (вплоть до создание табелей на продавцов) и встроенными элементами EDI. Это позволяет решать наши задачи так, как надо нашему бизнесу, а не так, как задумала компания, производящая POS системы для широкого круга лиц.
Еще одно отступление:
Стандартная конфигурация ERP2.1 как показала практика не пригодна к эксплуатации из "коробки", да она и не продается без услуг по внедрению.
Получается в пределе нет разницы "типовая" или "самописка", важна квалификация тех кто дорабатывает/разрабатывает конфигурацию.
p.s.
Гипотетически, если бы 1с поддерживала и продавала функциональный аналог 1С 7.7 ТиС но на 8 платформе, у которой по нынешним меркам простая конфигурация без наворотов,
легко дописываемая под нужды бизнеса, был бы не неё спрос?
Не от 1С конфигурация то есть () , но ктож рискнет её использовать как бы без поддержки :)
Героически написать свою конфу. Пытаться догнать по функциональности обновления типовой. Клепать костыли на костыль. Устать от всего этого. Набраться опыта и свалить с конторы, отставив их на поиски дорогого сумасшедшего кто это все будет поддерживать и допиливать.
И ДЛ использует и БП и ЗУП, с доработками конечно, но никто их с нуля не писал.
Плюсов много.
+ Вносить изменения в собственную конфигурацию и проще, да и приходится это делать ГОРАЗДО реже.
+ Она не имеет, как стандартная конфигурация, кучи лишних данных/возможностей, которые вы никогда не используете в силу специфики ваших бизнес процессов. Например: учет себестоимости у вас всегда ведется по среднескользящей стоимости и необходимости в партийных регистрах отсутствует.
+Она может быть остро заточена под ваш бизнес процесс, где квалификация сотрудников, работающих на ней может быть сильно снижена. Например: мы, создавая конфигурацию для курительного клуба, смогли полностью отказаться от такого понятия ка "последовательность", все документы специализированные под нужды компании, потому что в клубе запрещено говорить слова "продажа", а все продажи товаров в клубе клиентам, должна была отражаться не как продажа, а как затраты на нужды клуба с учетом того кто, сколько потратил.
+ Кто-то говорил "вы никогда не догоните типовую", смею утверждать, если у вас сильные методисты, вы не только догоните, но и быстро обгоните стандартные возможности 1С. Например, заполнение/проверка контрагентов по ИНН, у нас было написано в 1С 7.7, когда 1С еще маялась с бухгалтерией 2.5. Некоторые вещи, которые реализовывала команда, в которой я работал, 1С только еще только "раскуриват". Я пишу про это статьи кстати ;).
+ И при выходе очередного обновления 1С у вас не летит все к чертям, а очередное обновление превращается в перенаписание ваших изменений конфигурации заново.
Все эти преимущества можно получить при сильной команде 1С программистов и МЕТОДИСТОВ компании.
Минусов тоже не мало:
- Если вдруг увольняются ведущие специалисты по вашей самописной конфигурации, она "превращается в отраслевую типовую" для вновь пришедших программистов 1С, пока не въедут.
- Сложные задачи, как ведение зарплаты или регламентная отчетность с выгрузками в налоговую пока решаются только типовыми решениями, поскольку наше законодательство слишком часто меняется.
Раньше думал, что отложенное проведение - это перенос нагрузки на железо на другое время, например, ночью мощности простаивают.
Очень важная мысль, что при отложенном проведении решается проблема с блокировками таблиц.
Ежедневно 10000 заказов, в пике(праздники) 15000 заказов. 8 веб серверов для приема заказов, 200 магазинов. Всего строк в день 80000-130000.
Задача похожая на описанные в статье выполнялась в 23.00. Система закрывалась для приема заказов и начинала формировать задачи для комплектовщиков (400 комплектовщиков в смене).
Полное закрытие заказов и формирование всех задач занимало 20-30 минут. Никаких конфликтов блокировок.
Оборудование 2005 года, даже с учетом, что этот ритейл покрупнее, схожее или может даже слабее чем у автора.
Это информация - не в укор автору, а чтобы оценить способности SAP в сравнении с 1с.
в 1с переход на отложенное проведение происходит собственными силами, а не силами вендора, некоторые оптимизаторы даже осторожно делятся опытом, что это "хороший способ"... но это капля в море в мире 1с - каждая группа разработчиков так и будет придумывать велосипед...
еще бы, с данными в это время никто не работал, откуда взяться блокировкам?
и что там делалось если поступал заказ в 23:05?
да и конечно неплохо бы сравнить железо, на котором это все крутилось у автора и у вас.
Это информация, как раз в укор автору. "способности сап по сравнению с 1С" - ничтожны. САП не быстрее 1С. Если не говнокодить, то 1С технологически не медленнее сапа. Может для крупных заводов тяжелой промышленности САП лучше, не знаю. Но для сетевой торговли то, что предлагается консультантами САП и выдается за конфетку - ну... оно действительно по цвету похоже на шоколад, да. А вот если принюхаться...
По юзабилити - САП не стоял даже рядом. Посмотрите доклад Олега Филиппова двухлетней давности. Там далеко не все, но понять общую картину можно. Убогий синенький интерфейс, который продается как панацея для бизнеса. Как только не стыдно сие впаривать с честными лицами, даже не пойму.
Все разговоры SAP vs 1С достаточно бессмысленны. У SAP сильная сторона - стабильность платформы, изначальная ориентированность на масштабируемость. Скудность интерфейса, контроль над выполняемыми запросами ему как раз и помогают. Основной принцип "главное работа, а не рюшечки". К тому же SAP очень любят "внедрять" для повышения капитализации, и тут принцип "чем дороже тем лучше" явно не в пользу 1С.
1С идет по пути "дадим пользователям максимальную свободу" (собственно и конфигуратор изначально задумывался именно для пользователя), поэтому "из коробки" тонкий и web клиент, динамические списки, поиск, сортировка и отборы в формах списков по любой колонке, отчеты с гибкими настройками. Из минусов - у 1С много вопросов к самой платформе.
На 1С 7.7+SQL7.0(3GB) решали задачу по снижению времени на проведение документов по конкурентному резервированию и выписки документов реализации не более 1 сек.
На 8.3 ЕРП к таким скоростям даже приблизится не можем, несмотря на севера с памятью, многократно превышающей размеры баз.
Просто в современных продуктах 1С слишком много вспомогательных/не нужных регистров.
(70)
Поскольку взаимодействие процессов в типовой конфигурации не самое эффективное, самый оптимальный способ не править все, а прикрутить сверху собственных процесс, которые делает работу более оптимальным.
Даже стандартное решение от 1С "отложенное проведение" постоянно компенсирует мозги отделу ИТ.
Масштабировать не получится. Временное окно не резиновое.
Разнесли бы резервирование и запись/проведение. Резервирование вне транзакции и отдельно по каждому товару, а уж потом док проводить с тяжелыми движениями. Задним числом перепровели док? Ну, партионный учет по резервам и его восстановление.
В соседнем топике где-то менеджер потоков есть - прекрасная штука, даж думать ненадо, только массив ресурсов правильно сформировать :)
Ну и планировать что-то целиком подокументно — тоже бяка тотальная. Потому возможно и напарывались на блокировки.
В ней суть повышения производительности производства (без замены оборудования) сводилось как раз в аналогичный "фоновый процесс"-очередь на самом медленном участке. Там так же, как у автора статьи, общую производительность производства увеличили за счет заполнения работай самого медленного участка производства по времени.
Только согласно этой книге, автору статьи, делая очередь из заказов, нужно давать им метку по приоритету, и выполнять очередь согласно этих меток. Если скорость разбора в фоновой задаче заказов не велика, и образуется достаточно длинная очередь (буфер), необходимо иногда пропускать на выполнение заявки с более низким приоритетом, как это делает процессор intel с приоритетами потоков.
Они там еще в 10 раз ускорили :
1. Только одна секретарша занимается только резервированием, к слову в другом городе
2. Если кому то из менеджеров нужно зарезервировать - звонят этой секретарше.
И никаких блокировок
Придумать глобальный семафор какой нибудь, и проводить документ если никто не проводит сейчас,
иначе пользователю сообщение "Подождите 5сек, идет проведение другого документа".
Если без блокировок документ проводится быстро, то же может помочь, и даже не сильно тормозить работу :)
Так весь 1С на этом базируется. Если помножь "почти монопольное" проведение документа на время проведения (в последних релизах тут отрицательная тенденция наблюдается) … и вот, у тебя блокировки из за очереди проведения.
Автор предлагает решать задачу "кто пролезет в очередь" не самому пользователю (тыкая кнопку "провести" и ждать удачную попытку), а автоматической фоновой системе.
У меня тоже есть такой пример, только не связанный с оптимизацией. Руководство поставило задачу, наладить автоматический обмен с банками. Т.е. прием и отправку банковских выписок из 1С. У нас еще используется УПП и Бухгалтерия 2.0, где данная технология еще не реализована (DirectBank). При попытке разобраться как работает данная технология в Бухгалтерии 3.0 захотелось повеситься от печали.
В итоге, задачу решил следующим образом: поставил одну из последних версий Библиотеки электронных документов, настроил в ней подключение к банками с некой периодичностью и просто наладил обмен между УПП и БЭД.
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 842431
Создание 26.07.18 12:15
Обновление 26.07.18 12:15
Просмотры 23918
Загрузки 0
Рейтинг
82
Комментарии 100
Код открыт Да
Рубрики HighLoad оптимизация
Кому
Системный администратор
,
Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация Универсальные
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)
