Имя: Пароль:
1C
1С v8
Взаимоблокировки запросом (чтение)
0 yavasya
 
05.12.17
10:22
При ошибке deadlocked on lock администратор базы данных выслал такую информацию.

Есть скрин от пользователя со строкой ошибки.
В этой строке Запрос.Выполнить().
В запросе регистр который никто не записывает в данный период. В запросе нет строки с блокировкой. Запрос выполняется внутри двух транзакций :

1. Получаем документ "Бюджет подразделения" и Блокируем этот документ.
2.Создаем много документов "Бюджетная операция" и записываем в тч документа

Как можно решить данную проблему ?  

Блокирующие друг друга запросы:
1.
(@P1 varbinary(16),@P2 varbinary(16),@P3 varbinary(16),@P4 varbinary(16))INSERT INTO #tt102 WITH(TABLOCK) (_Q_000_F_000_TYPE, _Q_000_F_000_RTRef, _Q_000_F_000_RRRef) SELECT  0x08,  0x0000013E,  T1._IDRRef  FROM dbo._Document318 T1  WHERE (T1._Fld6003RRef IN (@P1))  UNION ALL SELECT  T2._Fld22053_TYPE,  T2._Fld22053_RTRef,  T2._Fld22053_RRRef  FROM dbo._InfoRg22052 T2  WHERE (T2._Fld22058RRef IN (@P2))  UNION ALL SELECT  T3._Fld22053_TYPE,  T3._Fld22053_RTRef,  T3._Fld22053_RRRef  FROM dbo._InfoRg22052 T3  WHERE (T3._Fld22059RRef IN (@P3))  UNION ALL SELECT  0x08,  0x0000013E,  T4._Document318_IDRRef  FROM dbo._Document318_VT6010 T4  WHERE T4._Fld29331RRef IN  (SELECT  T5.Fld30284RRef AS Q_004_F_000RRef  FROM (SELECT  T8._Fld30284RRef AS Fld30284RRef,  T8._Fld30286 AS Fld30286_  FROM (SELECT  T7._Fld30284RRef AS Fld30284RRef,  T7._Fld30285RRef AS Fld30285RRef,  MAX(T7._Period) AS MAXPERIOD_  FROM dbo._InfoRg30283 T7  WHERE ((T7._Fld30285RRef IN (@P4)))  GROUP BY T7._Fld30284RRef,  T7._Fld30285RRef) T6  INNER JOIN dbo._InfoRg30283 T8  ON T6.Fld302  
2.
(@P1 varbinary(16),@P2 varbinary(16),@P3 varbinary(16),@P4 varbinary(16))INSERT INTO #tt13 WITH(TABLOCK) (_Q_000_F_000_TYPE, _Q_000_F_000_RTRef, _Q_000_F_000_RRRef) SELECT  0x08,  0x0000013E,  T1._IDRRef  FROM dbo._Document318 T1  WHERE (T1._Fld6003RRef IN (@P1))  UNION ALL SELECT  T2._Fld22053_TYPE,  T2._Fld22053_RTRef,  T2._Fld22053_RRRef  FROM dbo._InfoRg22052 T2  WHERE (T2._Fld22058RRef IN (@P2))  UNION ALL SELECT  T3._Fld22053_TYPE,  T3._Fld22053_RTRef,  T3._Fld22053_RRRef  FROM dbo._InfoRg22052 T3  WHERE (T3._Fld22059RRef IN (@P3))  UNION ALL SELECT  0x08,  0x0000013E,  T4._Document318_IDRRef  FROM dbo._Document318_VT6010 T4  WHERE T4._Fld29331RRef IN  (SELECT  T5.Fld30284RRef AS Q_004_F_000RRef  FROM (SELECT  T8._Fld30284RRef AS Fld30284RRef,  T8._Fld30286 AS Fld30286_  FROM (SELECT  T7._Fld30284RRef AS Fld30284RRef,  T7._Fld30285RRef AS Fld30285RRef,  MAX(T7._Period) AS MAXPERIOD_  FROM dbo._InfoRg30283 T7  WHERE ((T7._Fld30285RRef IN (@P4)))  GROUP BY T7._Fld30284RRef,  T7._Fld30285RRef) T6  INNER JOIN dbo._InfoRg30283 T8  ON T6.Fld3028
1 yavasya
 
05.12.17
10:23
При ошибке deadlocked on lock администратор базы данных выслал такую информацию.

Блокирующие друг друга запросы:
1.
(@P1 varbinary(16),@P2 varbinary(16),@P3 varbinary(16),@P4 varbinary(16))INSERT INTO #tt102 WITH(TABLOCK) (_Q_000_F_000_TYPE, _Q_000_F_000_RTRef, _Q_000_F_000_RRRef) SELECT  0x08,  0x0000013E,  T1._IDRRef  FROM dbo._Document318 T1  WHERE (T1._Fld6003RRef IN (@P1))  UNION ALL SELECT  T2._Fld22053_TYPE,  T2._Fld22053_RTRef,  T2._Fld22053_RRRef  FROM dbo._InfoRg22052 T2  WHERE (T2._Fld22058RRef IN (@P2))  UNION ALL SELECT  T3._Fld22053_TYPE,  T3._Fld22053_RTRef,  T3._Fld22053_RRRef  FROM dbo._InfoRg22052 T3  WHERE (T3._Fld22059RRef IN (@P3))  UNION ALL SELECT  0x08,  0x0000013E,  T4._Document318_IDRRef  FROM dbo._Document318_VT6010 T4  WHERE T4._Fld29331RRef IN  (SELECT  T5.Fld30284RRef AS Q_004_F_000RRef  FROM (SELECT  T8._Fld30284RRef AS Fld30284RRef,  T8._Fld30286 AS Fld30286_  FROM (SELECT  T7._Fld30284RRef AS Fld30284RRef,  T7._Fld30285RRef AS Fld30285RRef,  MAX(T7._Period) AS MAXPERIOD_  FROM dbo._InfoRg30283 T7  WHERE ((T7._Fld30285RRef IN (@P4)))  GROUP BY T7._Fld30284RRef,  T7._Fld30285RRef) T6  INNER JOIN dbo._InfoRg30283 T8  ON T6.Fld302  
2.
(@P1 varbinary(16),@P2 varbinary(16),@P3 varbinary(16),@P4 varbinary(16))INSERT INTO #tt13 WITH(TABLOCK) (_Q_000_F_000_TYPE, _Q_000_F_000_RTRef, _Q_000_F_000_RRRef) SELECT  0x08,  0x0000013E,  T1._IDRRef  FROM dbo._Document318 T1  WHERE (T1._Fld6003RRef IN (@P1))  UNION ALL SELECT  T2._Fld22053_TYPE,  T2._Fld22053_RTRef,  T2._Fld22053_RRRef  FROM dbo._InfoRg22052 T2  WHERE (T2._Fld22058RRef IN (@P2))  UNION ALL SELECT  T3._Fld22053_TYPE,  T3._Fld22053_RTRef,  T3._Fld22053_RRRef  FROM dbo._InfoRg22052 T3  WHERE (T3._Fld22059RRef IN (@P3))  UNION ALL SELECT  0x08,  0x0000013E,  T4._Document318_IDRRef  FROM dbo._Document318_VT6010 T4  WHERE T4._Fld29331RRef IN  (SELECT  T5.Fld30284RRef AS Q_004_F_000RRef  FROM (SELECT  T8._Fld30284RRef AS Fld30284RRef,  T8._Fld30286 AS Fld30286_  FROM (SELECT  T7._Fld30284RRef AS Fld30284RRef,  T7._Fld30285RRef AS Fld30285RRef,  MAX(T7._Period) AS MAXPERIOD_  FROM dbo._InfoRg30283 T7  WHERE ((T7._Fld30285RRef IN (@P4)))  GROUP BY T7._Fld30284RRef,  T7._Fld30285RRef) T6  INNER JOIN dbo._InfoRg30283 T8  ON T6.Fld3028
2 ИТ директор
 
05.12.17
10:33
3 ИТ директор
 
05.12.17
10:37
Режим управления блокировками какой в конфе?
4 yavasya
 
05.12.17
10:44
(3)  УПП 1.3
5 vicof
 
05.12.17
10:46
(4)
-Где ты был вчера?
-Мандарины
6 yavasya
 
05.12.17
10:51
(3) УПП 1.3 типовая, автоматический, в совместимости с управляемыми блокировками

(5) вроде опытный товарищ, не знаешь какой режим блокировки в старых конфах на толстых формах
7 ИТ директор
 
05.12.17
10:56
(6) Вообще-то в УПП 1.3 уже очень давно в свойствах конфы только управляемый режим.
8 ИТ директор
 
05.12.17
11:01
+(7) Раз автоматический, тогда статья из (2) актуальна.

Внутри транзакции "1. Получаем документ "Бюджет подразделения" и Блокируем этот документ."

сделай чтение этого документа запросом с опцией ДЛЯ ИЗМЕНЕНИЯ
9 vicof
 
05.12.17
11:03
(6) И перевидал этих типовых и нетиповых миллион. И в каждой по-разному.
10 ИТ директор
 
05.12.17
11:04
+(8) Перед чтением документа-объекта
11 DexterMorgan
 
05.12.17
11:06
(6) А ты опытный товарищ? Ну объясни, пожалуйста, что такое "толстые формы"?
12 yavasya
 
05.12.17
11:12
(11) Не очень опытный ) Толстые формы - это формы для обычного приложения , толстые , мощные )))
13 yavasya
 
05.12.17
11:14
(8) Благодарю
14 ИТ директор
 
05.12.17
11:17
Только я нифига не понял зачем тут 2 транзакции.
15 yavasya
 
05.12.17
11:21
(14) имею ввиду что 1 транзакция начинается перед получением объекта , вторая при создания документов к нему.
Логически неделимая цепочка.
Я не проектировал, только исправляю баг
16 ИТ директор
 
05.12.17
11:23
(15) Типа вложенная транзакция штоли?
17 yavasya
 
05.12.17
11:25
(16) Второй транзакцией я считаю обработку проведения документов при создании на основании для добавления в табличную часть документ - основание
18 ИТ директор
 
05.12.17
11:29
Я хз че у тебя там делается и как на самом деле, попробуй сделать (8)
19 yavasya
 
05.12.17
11:36
(18) не знаю с чем это связано, но с подключением пользователя по РДП к серверу все работает. Чистка кэш на локальном компьютере не помогла.
20 DexterMorgan
 
05.12.17
11:56
(12) Не бывает толстых форм, есть режим запуска - толстый клиент, в котором и управляемые формы прекрасно работают
21 yavasya
 
05.12.17
12:28
(20) я имел ввиду режим запуска толстый клиент обычное приложение
22 Alligator219
 
05.12.17
16:53
(6) А ви таки знаете что когда ви включаете режим управления блокировками "Автоматический и управляемый", то работает и менеджер блокировок СУБД, и менеджер блокировок 1С?
23 H A D G E H O G s
 
05.12.17
17:01
(0) Я бы сделал ставку на индексный скан регистра сведений, по которому делается срез последних
24 yavasya
 
06.12.17
08:20
(23) и средствами SQL проиндексировать ?
25 yavasya
 
06.12.17
08:21
(22) не знал, изучаю администрирование 1С, благодарю за информацию
26 yavasya
 
06.12.17
08:22
(22) а если управляемые, то как работают блокировки ?
27 yavasya
 
06.12.17
08:32
Доброе утро ! Коллеги блокировка стала на запись нового документа, если по данному типу документов в конфигурации не используются управляемые блокировки, могут ли помешать другие пользователи которые создают также этот тип документа?
28 MrStomak
 
06.12.17
08:37
(27) да даже по тексту из (0) видно, что дедлок на регистре сведений.
29 yavasya
 
06.12.17
08:40
(28) сейчас другая ошибка
30 MrStomak
 
06.12.17
08:43
(29) Скрывай как можно больше инфы, никогда не пиши иексты ошибок!
31 MrStomak
 
06.12.17
08:45
В (8) уже дали ответ давно.
32 yavasya
 
06.12.17
08:52
(31) Доступ к статье запрещен
33 MrStomak
 
06.12.17
09:01
(32)
В тексте дали ответ.
Делай запрос Выбрать * из регистрсведений.блабла для изменения.
Выполняй запрос перед этим твоим дедлочным. Будет работать медленно, но надежно.
34 yavasya
 
06.12.17
09:03
(33) это ошибка возникает при записи нового документа. Почему возникает deadlock on lock  не понятно.
35 MrStomak
 
06.12.17
09:06
(34) ты чего сейчас от людей хочешь? Чтобы тебе придумали и угадали схему твоего дедлока? Один из вариантов - повышение уровня блокировки в транзакции, ДЛЯ ИЗМЕНЕНИЯ это уберет.
36 yavasya
 
06.12.17
09:17
(35) v8: Deadlock - Повышение уровня блокировки (Управляемый режим)
читаю твои ответы.

Какие курсы можно пройти/прочитать чтобы узнать про блокировки, производительность? Нужна практика при этом иначе забывается быстро
37 MrStomak
 
06.12.17
09:53
(36)
Я думаю, у Гилёва (Евгения) всё для тебя найдётся в заначке, любой курс.
38 ИТ директор
 
06.12.17
10:02
(36) От УЦ 1 щас вроде В.Богачев по выходным ведет очные вебинары, причем прайс у этого мероприятия в районе 15 рублей.

Но последнее время ребята из принимающих 1С:Эксперт очевидно испытывают кризис жанра и принимают тяжелые психотропные вещества, говорят на тренинге все дни учатся писать регулырные выражения для анализа ТЖ - ноу комментс как говорится.

Но я бы посоветовал не ввязываться в этот марафон, а тупо-глупо разобрать по этой теме статьи на kb.1c.ru
И быстрее и денег сэкономишь. Там понимать-то нефиг по сути.
39 тарам пам пам
 
06.12.17
11:38
(38) Так и есть - был в сентябре на эксперте, почти все 3 дня тренинга - по сути изучение регэкспов и grep sed awk. Полезного было кот наплакал.
AdBlock убивает бесплатный контент. 1Сергей