|
И снова про конфликт блокировок | ☑ | ||
---|---|---|---|---|
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
|
Ок. Ставлю крестик и обвожу его кружочком.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |