0. ddemenev 47 15.11.16 08:47 Сейчас в теме

Одно из простых решений проблемы зависания 1С из-за конфликта блокировок

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

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. Новиков 289 15.11.16 10:11 Сейчас в теме
Приветствую! А можно скрин структуры регистра из примера?
4. ddemenev 47 15.11.16 12:23 Сейчас в теме
(1) Новиков, в моем случае, это независимый непериодический регистр сведений с одним измерением "Номенклатура"
Прикрепленные файлы:
2. herfis 264 15.11.16 11:01 Сейчас в теме
Было решено не накладывать принудительные блокировки на основные таблицы хранения в связи с их большим размером, частыми чтениями, проблемами контроля различных блокировок и пр.

Странное решение. Мне кажется, что вы элегантно решили несуществующую проблему. Наложение точно таких же управляемых блокировок на основные таблицы, а не на пустой регистр, никак не должно было сказаться на эффективности, ИМХО.
Сервис управляемых блокировок, по-идее, прямо не связан с СУБД и используемыми таблицами. Эта штука и так стоит в стороне и нет необходимости пытаться отодвинуть ее еще дальше.
Вам просто показалось проще прикрутить еще один слой, чем разбираться и грамотно править существующий.
ЗЫ. Ах да, вполне возможно, что это и оправданное решение, чтобы не курочить типовую. Я лишь указываю, что использовать отдельные пустые структуры само по себе не предполагает повышение эффективности.
alest; Silenser; _also; Yashazz; Nick_N; zqzq; Andreynikus; purgin; asved.ru; c1nil; Dach; hulio; alex-l19041; ddemenev; +14 Ответить
3. ddemenev 47 15.11.16 11:22 Сейчас в теме
(2) herfis, вы правы во всем, частично решение вызвано недостатком опыта в настройке и управлении блокировками, частично недостатком времени на глубокий анализ проблемы в связи с большим потоком задач по разработке ПО. Я потому и определил способ, как простой - не у всех есть возможность длительное время заниматься серьезной отладкой гибких блокировок. Для моей системы это не первая попытка решить проблему и первое решение, которое принесло желаемый результат без побочных негативных эффектов.
6. bulpi 136 15.11.16 16:08 Сейчас в теме
(2)
Нет, это не странное решение. Ты типовую УПП смотрел ? При попытке разобраться с алгоритмами проведения возникает устойчивое желание завязать с 1с навсегда :)

Вопрос к автору : а почему ПриЗаписи, а не ОбработкаПроведения ?
7. ddemenev 47 16.11.16 07:33 Сейчас в теме
(6) bulpi, место кода, в котором необходимо разместить блокировку, зависит от особенностей учета товарооборота в тек. БД. В моем случае с целью повышения производительности отключен контроль остатков и размещение блокировки в процедуре "При записи" принесло максимальный эффект.
5. Lem0n 108 15.11.16 16:07 Сейчас в теме
"проведения документов без наложения управляемых блокировок 1С на основные регистры хранения данных"
Движения.Записать() - наложит управляемые блокировки
Вместо ожидания на "основных регистрах" получаем ожидание на блокировках на регистре сведений, т.е. очередь ожидания разбита: одни ждут на регистре сведений , другие - на "основных регистрах" (если нет представленного кода в др документах, двигающих "основные регистры").
Предложу решение лучше этого (ни в коем случае не считаю его правильным) - Администрирование - параметры информационной базы - ожидание блокировки в сек. увеличить
8. Serg O. 132 16.11.16 14:57 Сейчас в теме
1) блокировка держится 20 сек ( в 1С 8.2 )

2) вопрос - в этот регистр идёт запись товаров или нет?
если нет, то при наложении блокировки на пустую таблицу - ВСЯ таблица всегда блокируется...
а не только по этим товарам

3) "с целью повышения производительности отключен контроль остатков" - вот это у вас и тормозило скорее всего
не понятно... как вы без контроля живете

скорее всего у вас после отключения контроля остатков - просто НЕ возникает блокировки на 20 и более секунд никогда

4) для точного ответа на вопрос что и где блокируется - есть инструмент (бесплатный) для анализа блокировок
http://www.gilev.ru/timeoutlock/
Gilev.Vyacheslav; +1 Ответить
9. ddemenev 47 16.11.16 15:40 Сейчас в теме
(8) Serg O., "в этот регистр идёт запись товаров или нет?" - нет, запись в регистр не производится, регистр пустой. При этом блокировка накладывается только на список текущих товаров, при принудительном прерывании записи тек. документа (по точке останова), документы с другим набором продукции проводятся. Документы с товарами блокировки при проведении попадают в состояние ожидания. От контроля остатков отказались более 4 лет назад, т.к. с включенным контролем работать было невозможно. Ежедневно в пиковые часы нагрузки у нас беспрерывная одновременная сборка заказов на 20 местах комплектовки в течение 4-6 ч., при этом обрабатывается до 2000 заказов. Описанная система блокировки запущена в феврале этого года, и совместно с оптимизацией кода решила проблему блокировок по номенклатуре полностью. Среднее время проведения РТиУ после оптимизации - около 1 с.
10. Gilev.Vyacheslav 1796 16.11.16 15:55 Сейчас в теме
(0) лучше бы Вы версионирование включили http://www.gilev.ru/snapshot1c/
zakiap2; Danil.Potapov; +2 1 Ответить
11. ddemenev 47 16.11.16 16:34 Сейчас в теме
(10) Gilev.Vyacheslav, Спасибо, в настоящее время одной из задач стоит включение контроля остатков при комплектации. Обязательно воспользуюсь Вашим советом. Немного смущает использование базы tempdb для хранения версий, в связи с тем, что для нас это одно из узких мест, несмотря на расположение темповой бд на быстрых SSD дисках. Но обязательно попробую.
13. Gilev.Vyacheslav 1796 17.11.16 17:23 Сейчас в теме
(11) ddemenev, альтернативой может быть размещение tempdb на RAM-диске
16. ddemenev 47 17.11.16 19:49 Сейчас в теме
(13) Gilev.Vyacheslav, спасибо за советы, очень полезные и по теме. Ценнее другое. Лично для меня убиты предрассудки, что Ваша команда, Ваш интернет ресурс функционируют с исключительной целью получения прибыли за счет сложных решений не столь сложных проблем. Ошибался. Обязательно буду использовать Ваш сайт, как источник экспертных знаний.
17. jaroslav.h 19.11.16 22:36 Сейчас в теме
(10) Gilev.Vyacheslav, и тут Слава ты не смог не зарекламироваться, не хватило терпения, что бы не наследить и тут
12. caponid 16.11.16 16:40 Сейчас в теме
Может быть это для кого-то и плохое решение, но как я понимаю в данном случае это было хоть и вынужденное, но рабочее.
Я вижу единственное применение данного метода - это временный "костыль" для исключения взаимоблокировок - перенос взаимоблокировки в принудительную блокировку в обработчик "ПриЗаписи". т.е. взаимоблокировки сводятся к ожиданию на блокировке. Тут явно что то не то с кодом и порядком в проведении.

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

Sardukar; +1 Ответить
14. JohnGalt 11 17.11.16 17:36 Сейчас в теме
Очень помогает включение READ_COMMITTED_SNAPSHOT для бд MS SQL.
15. Yashazz 2301 17.11.16 18:01 Сейчас в теме
Раз эту тему посетил Гилёв, попробую узнать несколько моментов:
1. Если наложить управляемую блокировку, где одно из значений неверное (в источнике или через прямую установку) - она его проигнорирует и наложит, что сможет, или вообще не сработает?
2. Если наложить управляемую блокировку с одним источником, а потом в той же транзакции с другим, и эти два источника противоречат друг другу, то что будет - блокировка по "И", по "ИЛИ", по "XOR" или всегда актуальна только последняя по времени наложения?
3. Если наложить управляемую блокировку с указанием пустого значения, как она себя поведёт? Допустим, в регистре есть измерение, для которого разрешены пустые значения, ну и в условиях блокировки тоже пустое - нормально отработает или эскалирует? И что будет, если там многотипное измерение и значения даются блокировке пустые, но по-разному? Или "Неопределено", NULL итд?

Кто знает, расскажите. У меня тупо руки не доходят поэкспериментировать, совсем нет времени.
igormiro; +1 Ответить
18. igormiro 690 03.01.17 12:32 Сейчас в теме
Интересная статья.
А если блокировку наложить до начала транзакции, например перед записью. Как отработает SQL Сервер, фактически транзакция c блокировкой по номенклатуре а внутри неё транзакция документа.
19. herfis 264 03.01.17 14:20 Сейчас в теме
(18)
1) управляемые блокировки не имеют никакого отношения к блокировкам СУБД и никак не влияют на работу SQL-сервера. Он вообще про них не в курсе - они сервером приложений разруливаются
2) вне транзакций управляемые блокировки не имеют никакого смысла - это инструмент разрешения конфликтов транзакций. Если не ошибаюсь, то попытка наложить управляемую блокировку вне транзакции вызовет исключение. Если речь про вложенные транзакции - то здравый смысл подсказывает, что все блокировки должны удерживаться до завершения самой внешней транзакции.
igormiro; +1 Ответить
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Удаленный ИТ-журналист
Санкт-Петербург
По совместительству

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 130 000 руб. до 150 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Руководитель группы сервисов FRM на 1С
Москва
зарплата от 150 000 руб.
Полный день