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

0. Дмитрий Деменёв (ddemenev) 48 15.11.16 08:47 Сейчас в теме
Простой и эффективный способ решения проблемы блокировок 1С по номенклатуре, контрагентам с помощью формирования динамической очереди проведения документов без наложения управляемых блокировок 1С на основные регистры хранения данных.

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

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

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

Вопрос к автору : а почему ПриЗаписи, а не ОбработкаПроведения ?
7. Дмитрий Деменёв (ddemenev) 48 16.11.16 07:33 Сейчас в теме
(6) bulpi, место кода, в котором необходимо разместить блокировку, зависит от особенностей учета товарооборота в тек. БД. В моем случае с целью повышения производительности отключен контроль остатков и размещение блокировки в процедуре "При записи" принесло максимальный эффект.
5. Andrey BedaNastala (Lem0n) 61 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) 48 16.11.16 15:40 Сейчас в теме
(8) Serg O., "в этот регистр идёт запись товаров или нет?" - нет, запись в регистр не производится, регистр пустой. При этом блокировка накладывается только на список текущих товаров, при принудительном прерывании записи тек. документа (по точке останова), документы с другим набором продукции проводятся. Документы с товарами блокировки при проведении попадают в состояние ожидания. От контроля остатков отказались более 4 лет назад, т.к. с включенным контролем работать было невозможно. Ежедневно в пиковые часы нагрузки у нас беспрерывная одновременная сборка заказов на 20 местах комплектовки в течение 4-6 ч., при этом обрабатывается до 2000 заказов. Описанная система блокировки запущена в феврале этого года, и совместно с оптимизацией кода решила проблему блокировок по номенклатуре полностью. Среднее время проведения РТиУ после оптимизации - около 1 с.
10. Вячеслав Гилёв (Gilev.Vyacheslav) 1763 16.11.16 15:55 Сейчас в теме
(0) лучше бы Вы версионирование включили http://www.gilev.ru/snapshot1c/
zakiap2; Danil.Potapov; +2 1 Ответить
11. Дмитрий Деменёв (ddemenev) 48 16.11.16 16:34 Сейчас в теме
(10) Gilev.Vyacheslav, Спасибо, в настоящее время одной из задач стоит включение контроля остатков при комплектации. Обязательно воспользуюсь Вашим советом. Немного смущает использование базы tempdb для хранения версий, в связи с тем, что для нас это одно из узких мест, несмотря на расположение темповой бд на быстрых SSD дисках. Но обязательно попробую.
13. Вячеслав Гилёв (Gilev.Vyacheslav) 1763 17.11.16 17:23 Сейчас в теме
(11) ddemenev, альтернативой может быть размещение tempdb на RAM-диске
16. Дмитрий Деменёв (ddemenev) 48 17.11.16 19:49 Сейчас в теме
(13) Gilev.Vyacheslav, спасибо за советы, очень полезные и по теме. Ценнее другое. Лично для меня убиты предрассудки, что Ваша команда, Ваш интернет ресурс функционируют с исключительной целью получения прибыли за счет сложных решений не столь сложных проблем. Ошибался. Обязательно буду использовать Ваш сайт, как источник экспертных знаний.
17. Ярослав Володимирович (myr4ik07) 110 19.11.16 22:36 Сейчас в теме
(10) Gilev.Vyacheslav, и тут Слава ты не смог не зарекламироваться, не хватило терпения, что бы не наследить и тут
12. Caponid V (caponid) 16.11.16 16:40 Сейчас в теме
Может быть это для кого-то и плохое решение, но как я понимаю в данном случае это было хоть и вынужденное, но рабочее.
Я вижу единственное применение данного метода - это временный "костыль" для исключения взаимоблокировок - перенос взаимоблокировки в принудительную блокировку в обработчик "ПриЗаписи". т.е. взаимоблокировки сводятся к ожиданию на блокировке. Тут явно что то не то с кодом и порядком в проведении.

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

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

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