Имя: Пароль:
1C
1С v8
И снова про конфликт блокировок
0 Krabb
 
28.04.20
14:25
Здравствуйте!

Конфигурация 1С розница 2.2.13.11, платформа 8.3.16.1224, режим работы клиент-серверный, СУБД MS SQL 2016
7 магазинов, в базе одновременно работает примерно 20 пользователей, включено разделение данных по магазинам

С недавнего времени перестали проводиться некоторые отчеты о розничных продажах.
Включил технологический журнал в нём отловил событие "Транзакция вызвала взаимоблокировку ресурсов блокировка с другим процессом и стала жертвой взаимоблокировки": https://a.radikal.ru/a41/2004/9a/c198d88624f5.png
Нашел эту блокировку в журнале SQL: https://c.radikal.ru/c21/2004/54/13b31ba5b20ft.jpg ссылка на xml: https://my-files.su/lm5w2i
Установил что блокируется таблица итогов РН БонусныеБаллы: https://a.radikal.ru/a21/2004/ea/db113882d303.png

Но что дальше? Как решить эту проблему?
1 Cyberhawk
 
28.04.20
14:27
Блокировка провалилась до СУБД. Решение - упр. блокировка.
2 Cyberhawk
 
28.04.20
14:28
Пади у регистра разделение итогов разрешено, и в коде оно не отключено.
Еще редкая причина - блокировка на смежных страницах индекса. Кодом никак не лечится.
3 Krabb
 
28.04.20
14:51
(1) Конфигурация типовая, режим управления блокировкой - управляемый
4 Krabb
 
28.04.20
15:03
(2) Да, галка разрешить разделение итогов стоит, но как это может вызывать блокировки? (я сейчас не спорю, мне интересно разобраться)
5 Конструктор1С
 
28.04.20
16:47
"некоторые отчеты о розничных продажах"

Небось, табличные части здоровские?
6 Cyberhawk
 
28.04.20
18:21
(4) Встань в отладке на строку записи коллекции движений, посмотри и сообщи сюда значение свойства "БлокироватьДляИзменения" элемента коллекции движений по регистру БонусныеБаллы
7 Krabb
 
28.04.20
18:46
8 Cyberhawk
 
28.04.20
18:47
(7) Засим разкланиваюсь
9 Krabb
 
28.04.20
18:48
(8) Это тролинг такой был? Что не так?
10 Cyberhawk
 
28.04.20
18:50
(9) У меня нет цели разжевать и в рот положить
11 Krabb
 
28.04.20
19:08
Для себя любимого и будущих поколений:
Почему плохо не использовать БлокироватьДляИзменения при включенном разделении итогов написано, разжевано и положено в рот здесь: http://catalog.mista.ru/public/196565/
12 fisher
 
29.04.20
10:23
(10)(11) А можно для тупых поподробнее? Не могу придумать ситуацию, которая приведет к взаимоблокировке, если после записи не читать данные. А даже если читать после записи в той же транзакции (что далеко не частый случай), то в режиме версионника (в котором, ИМХО, сейчас все работают) тоже никаких взаимоблокировок не будет
13 Cyberhawk
 
29.04.20
10:25
(12) А с чего ты взял, что причина в этом?
14 fisher
 
29.04.20
10:42
(13) Я не пойму в чем причина. Поэтому и спрашиваю. Это просто единственная причина которая приходит в голову и она же описана в статье (11)
15 fisher
 
29.04.20
12:21
(13) Эгей! Намекни хотя бы, если реально просек фишку.
16 Cyberhawk
 
29.04.20
17:40
(15) Ты не читатель что ли? ) Первое мое сообщение в этой ветке
17 rozer76
 
29.04.20
22:14
(15) две причины дедлока - или повышение уровня изоляции (вместо исключительной блокировки установлена разделяемая) или захват ресурсов в разном порядке (напр в одном доке проводитчя по регистру А а потом Б а вдругом доке - наоборот. Поставь ЦУП и погляди в режиме анализа. Правда второй пункт нетривиально найти будет.В цупе и до уровня кода провалишься ...
18 fisher
 
30.04.20
11:18
(16) Меня интересует что в середине этой причинно-следственной связи, т.к. она для меня неочевидна. В какой момент происходит взаимоблокировка? Кто ожидает какого ресурса и по какой причине? Если мы только пишем, то я не понимаю как (1) может послужить причиной взаимоблокировки. Прошу объяснить. Я понятливый и понимаю с полуслова. Но ты пока к (1) полуслова не добавил.
19 Cyberhawk
 
30.04.20
11:21
(18) Второе
20 fisher
 
30.04.20
11:41
(19) Плять! Все это время "и в коде оно не отключено" я читал как "и в коде оно отключено" :)
Заработался.
21 fisher
 
30.04.20
11:45
Не. Погоди. "И в коде оно не отключено" (в смысле - разделение итогов) - имеется в в виду что не используется "БлокироватьДляИзменения"?
Тогда я все правильно понял. Вернее - не понял. Ну не используем мы "БлокироватьДляИзменения". Пишем по разным разделителям. Какого фига возникает взаимоблокировка? Эскалация? Или что-то другое?
22 fisher
 
30.04.20
11:47
Но даже эскалация непонятно как приводит к взаимоблокировке. Была бы просто блокировка с таймаутом. Взаимоблокировка - когда каждая из транзакций ожидает ресурс, заблокированный другой транзакцией. Где здесь это?
23 Demiurg
 
30.04.20
15:17
вот специально сделали для людей инструмент для расследования http://www.gilev.ru/deadlock/ бесплатный, нет надо идти классическими граблями
у вас вообщем то укрупненно два пути
первый - качественно расследовать хронологию
второй - поскольку баллы вторичны, то пишите их отложенно в фоновике через очередь заданий
если вами баллы реально не используются то вообще отключите
24 mistеr
 
30.04.20
16:29
(21) В статье (11) всё расписано.
25 Cyberhawk
 
01.05.20
09:54
(22) Не туда копаешь и не там прочитал :)
26 fisher
 
02.05.20
14:46
Ок. Ставлю крестик и обвожу его кружочком.