Имя: Пароль:
1C
1С v8
Конфликт блокировок + удваивание rphost-тов
0 vmprog
 
30.01.15
11:59
Всем привет.
Случилась проблема и повторяется в спонтанные моменты.
Имеем
Сервер 1С 8.2.19.106
SQL на отдельной машине 2012
Куча баз как файловых так и SQL. Основное количество пользователей используют 1С Документооборот.
У пользователей начинает массово возникать окно с Конфликтом блокировок.
Нажатие кнопки Подробно ведет в разные участки кода на метод Записать(). Каждый раз это запись разных таблиц.
Характерный момент. В нормальном режиме на сервере 1С живут 4 процесса в rphost. Сразу после первого обращения пользователя с ошибкой блокировки количество rphost-ов уже 8. И количество сеансов раза в 4 больше количества соединений.
Параллельно начинают звонить пользователи других баз с конфликтом блокировок.
Ситуацию временно лечит перезапуск службы 1С сервера.
Тех журнал на сервере ошибок не показывает.
Запрос на SQL демонстрирующий заблокированные таблицы с каждым формированием запроса показывает разные заблокированные таблицы.

В каком направлении рыть? Второй день такая проблема. Помогите.
1 Escander
 
30.01.15
12:01
Попробую угадать: конфа пилена?
2 vmprog
 
30.01.15
12:03
да. Очень сильно. Работает так уже 4 года.
3 Андрюха
 
30.01.15
12:20
(0) win64 ?
4 vmprog
 
30.01.15
12:26
Win2008 63, но 1С Сервер 32 разрядный
5 vmprog
 
30.01.15
12:26
64
6 vmprog
 
30.01.15
13:08
Люди не дайте погибнуть
7 kerm
 
30.01.15
16:05
У тебя когда окно с ошибкой выходить там написано про взаимоблокировки или просто из-за блокировки?
8 kerm
 
30.01.15
16:25
Если взаимоблокировки то или разный порядок захвата ресурса или повышение изоляции ресурса. Если просто блокировки смотришь код запросов. Из проведения документов я убрал все кроме самого проведения. Проверки перекинул в процедуру перед записью при проведении. Дополнительные обработки перекинул на регламентные задания. Даже без перехода на управляемый режим все работает. Теперь базу перекинули на слабый сервер и заявили мне что бизнес потребности в быстродействии нет.
9 Fragster
 
гуру
30.01.15
16:35
(8) > Проверки перекинул в процедуру перед записью при проведении

в модуль объекта? тогда смысл, если оно всё равно в той же транзакции? В модуль формы? Тогда смысл, если документ можно провести из списка без этих проверок?
10 H A D G E H O G s
 
30.01.15
16:42
(9) Все он правильно сделал
11 H A D G E H O G s
 
30.01.15
16:43
(9) Проверки должны идти ПередЗаписью() модуля объекта документа, с проверкой режима записи (режимЗаписи=Проведение), до транзакции.
12 H A D G E H O G s
 
30.01.15
16:46
(11) Естественно, проверяться должен сам документ.
13 kerm
 
30.01.15
16:54
удваивание rphost-тов - возможна утечка памяти.
14 kerm
 
30.01.15
16:59
Например в бесконечном цикле создаются какие то объекты.
15 Dmitrii
 
гуру
30.01.15
17:06
(11) >> ПередЗаписью() модуля объекта документа... до транзакции.

Это как?

ДокументОбъект
ПередЗаписью (BeforeWrite)
Описание:
Возникает перед выполнением записи объекта. Процедура-обработчик вызывается ПОСЛЕ НАЧАЛА ТРАНЗАКЦИИ ЗАПИСИ, но до начала записи документа
16 H A D G E H O G s
 
30.01.15
17:22
(15) Да, я оошибся, признаю.
17 kerm
 
30.01.15
17:35
(15) реально помогло. Сделал еще весной 2010 года. База просто висела. В своих знаниях по управляемой блокировке не был уверен. По этому сначала перевел на управляемый режим а потом вернул обратно. От 800 до 1500 заказов в день и соответственно столько-же реализаций.
Как я понимаю если перед выполнением записи документа при проведении значит документ не записался и движения еще не пытаются записаться в регистры. Документ ведь может быть не записан. Значит пока нет исключительной блокировки - только пока чтение. При Отказе перед выполнением записи документа нечего откатывать обратно не надо. Думаю и формировать движения в модуле проведения документ не будет. Надо проверить.
18 Mikhail Volkov
 
30.01.15
18:06
Вчера был в одной конторе, до сих пор сидят на 8.1, при чем не на последнем ее релизе! Говорят, что из-за конфликтов блокировок!?
19 kerm
 
30.01.15
18:53
(15) Проверил: вызывается через
ЗаписатьВФорме(РежимЗаписиДокумента.Проведение)
При отказе - обработка проведения не вызывается.
Перечитав строку:
"Процедура-обработчик вызывается ПОСЛЕ НАЧАЛА ТРАНЗАКЦИИ ЗАПИСИ, но до начала записи документа."
- понял что здесь описывается транзакция записи самого документа, а не транзакция проведения его движений.
20 celentano
 
30.01.15
19:37
(0) Правильный ответ: Оплатить услуги эксперта
21 Mikhail Volkov
 
31.01.15
03:55
(17) > От 800 до 1500 заказов в день и соответственно столько-же реализаций
Это все по одной организации? Документы разных организаций одновременно дает проводить?
22 Escander
 
31.01.15
07:07
(2) конфа на управляемых блокировках?
23 Escander
 
31.01.15
07:08
(20) это не спортивно
24 Mikhail Volkov
 
31.01.15
08:44
+(18) Ну и как с ними бороться? Или оставаться на 8.1...
25 celentano
 
31.01.15
10:40
(23) Зато эффективно и стоит почти так же как и рисование печатных форм.
26 Mikhail Volkov
 
01.02.15
05:19
Встречал одну интересную конфигурацию УПС - управленческую платежную систему на базе УПП.
Во-первых отключен партионный учет (до появления РАУЗ) - товар всего один (раньше было 3 с разными ставками НДС).
А во-вторых с организациями поступили так же, как с контрагентами. Сами контрагенты же не являются объектами взаиморасчета, объектами взаиморасчета являются их договора, а контрагенты - это лишь их группировки. Также сделали с организациями - они лишь группировки подразделений.
В обычной УПП когда проводишь взаиморасчетный документ, блокируется все по организации документа. А в той УПС вроде остро вопрос блокировок не стоял.
27 Mikhail Volkov
 
02.02.15
05:16
Что заглохла тема?
28 vmprog
 
02.02.15
18:15
Решено.
Может кому пригодится.
Все началось с момента как я на этом сервере обновил сервер 1С до релиза 8.3.5.1383. Базы запустились, но перестала запускаться одна из внешних компонент (dll). Пришлось срочно возвращаться на сервер 8.2. Я останавливаю службу 8.3 и деинсталлирую ее. Запускаю службу сервера 8.2. Пользователи начинают работать. Через некоторое время начинается этот бред (см выше) причем в не понятные промежутки времени.
Решение:
Обратил внимание, что если открыть Администрирование-Службы, то там есть две записи Агент сервера предприятия 8.2 (Работает) и далее идет Агент сервера предприятия 8.3 (остановлена) хотя в (программах и компонентах) упоминания о 8.3 нет. Сделали следующее. Вычистили из реестра упоминания о 8.3. Перезагрузили сервер. Удалили и установили снова сервер 8.2 и проблема ушла.
29 Dmitrii
 
гуру
02.02.15
18:23
(19) >> ... транзакция записи самого документа, а не транзакция проведения его движений.

Запись и проведение документа выполняются в одной транзакции. Там нет двух транзакций.
Извините, но какая-то каша у вас в голове.

ПередЗаписью в обычной форме документа (событие формы) выполнятся действительно до начала транзакции. Но делать что-либо в этом обработчике касающееся проведения нельзя, т.к. документ может проводиться без открытия формы.
30 kerm
 
02.02.15
18:53
(29)
Если вы пишите что "ПередЗаписью в обычной форме документа (событие формы) выполнятся действительно до начала транзакции".
на свое утверждение (15) значит я прав.
На счет одной или двух транзакций можно утверждать что угодно. Предложите способ проверить. У меня такого способа пока нет. Есть просто рассуждение что движение без регистратора невозможно. А документ без движения есть.

В (8) я писал что: "Проверки перекинул в процедуру перед записью при проведении". Это ведь не касается самого проведения документа. Это проверки типа дробного количества не весового товара, задолженности контрагента, разных лимитов и т.д.  Того что касается интерактивной работы с документом.
31 Dmitrii
 
гуру
02.02.15
19:01
(30) У документа vjuen существовать  два события ПередЗаписью. Одно - в форме документа (выполняется до начала транзакции). Второе - событие самого документа (выполняется после начала транзакции, но до записи в базу)
Если документ проводится вне интерактивной работы (без открытия формы, то первое событие (которое событие формы документа) не обрабатывается, т.к. нет самой формы.

>> На счет одной или двух транзакций можно утверждать что угодно

Можно тупо открыть документацию по платформе. Вряд ли 1С-овцы будут врать. ;)

>> Проверки ... Того что касается интерактивной работы с документом.

Это вполне допустимо. Только тут надо внимательно думать и смотреть - что можно переносить в обработчики формы, а что нельзя. Например, вы вынесли в форму проверку на нехватку товара на складе (чтобы не было ухода в минуса). Эта проверка не будет выполнена при групповом перепроведении документов или восстановлении последовательности. Насколько это нормально - зависит от конкретного бизнеспроцесса в организации (для кого-то отключение контроля отрицательных остатков при проведении - нормальная ситуация).
32 Dmitrii
 
гуру
02.02.15
19:07
(30) >> движение без регистратора невозможно

Здрасти приехали.... Вы никогда не делали записи наборов записей регистров вне обработки проведения?
33 kerm
 
02.02.15
19:16
(32) ну еще здесь на пустом месте начинаете.
Я же имел в виду что если набор движений должен иметь регистратор, то должна быть хотя бы этого регистратора ссылка. И  ничего не писал на счет "наборов записей регистров вне обработки проведения".
34 Dmitrii
 
гуру
02.02.15
19:19
(33) Я к тому, что такая логика тут неуместна. Обязательность поля Регистратор никак не связана с наличием отдельной транзакции. Транзакция одна. И в случае Отказ=Истина откатывается целиком (включая запись документа в базу).
35 kerm
 
02.02.15
19:29
(34) Здесь вы наверно правы, но проверки вы все же не предложили. И если не вы сами писали эту транзакцию, то возможны варианты.
36 vi0
 
02.02.15
19:49
(35) в профайлере отследить события begin tran
37 Mikhail Volkov
 
03.02.15
13:04
(28) И что, Агент сервера предприятия 8.3 мешал работе агента 8.2? Я знаю конторы, где по 3 службы одновременно работают, и вроде не конфликтуют!?
38 vmprog
 
03.02.15
19:39
(37) Получается, что да. Причем агент 8.3 был не запущен. Факт остается фактом. До сего дня полет нормальный.
39 Mikhail Volkov
 
04.02.15
05:09
(38) Вроде агенты ставятся "рядом", но если агент 8.3 что-то "обновил" у агента 8.2, значит криво "обновил"...
Ошибка? Это не ошибка, это системная функция.