|   |   | 
| 
 | Конфликт блокировок при выполнении транзакции: | ☑ | ||
|---|---|---|---|---|
| 0
    
        Alex_Kh_ua 13.06.18✎ 16:30 | 
        Добрый день дорогие форумчане, есть беда, без Вашей помощи никак...
 по причине: Ошибка при выполнении обработчика - 'ПередЗаписью' Конфликт блокировок при выполнении транзакции: Microsoft SQL Server Native Client 11.0: Lock request time out period exceeded. Ошибка возникает в момент выполнения и выгрузки запроса, и не совсем понятно почему, так как в запросе явно указано, Блокировать получаемые данные для последующего изменения. Даже не знаю в какую сторону смотреть. Сам запрос обращается к некому регистру накоплений. http://prntscr.com/juhh8l Совершенно еще не селен в блокировках, может кто поделится дельным советом, куда можно копнуть? | |||
| 1
    
        lodger 13.06.18✎ 16:33 | 
        (0) выбор когда тогда иначе ЛОЖЬ конец.     | |||
| 2
    
        Alex_Kh_ua 13.06.18✎ 16:34 | 
        И что этой частью не так?     | |||
| 3
    
        lodger 13.06.18✎ 16:38 | 
        (2) "иначе ЛОЖЬ" допиши в секции ГДЕ.     | |||
| 4
    
        hhhh 13.06.18✎ 16:39 | 
        (2) ИНАЧЕ не расписал. Что делать если ИНАЧЕ     | |||
| 5
    
        Fragster гуру 13.06.18✎ 16:40 | 
        (1)(4) ну так там иначе NULL -> ложь     | |||
| 6
    
        Fragster гуру 13.06.18✎ 16:40 | 
        но есть мнение, что тут как-то сделана структура регистров, получать осаток путем анализа всего регистра как-то не очень хорошо     | |||
| 8
    
        hhhh 13.06.18✎ 16:41 | 
        (2) и что записываешь? Документ?
 лучше укажи ДЛЯ ИЗМЕНЕНИЯ Регистр такой-то. А то ты там полбазы блокируешь для изменения. | |||
| 9
    
        Alex_Kh_ua 13.06.18✎ 16:42 | 
        как (2) влияет на конфликт блокировок?     | |||
| 10
    
        Bober 13.06.18✎ 16:42 | 
        (0) 
 1. установлен индекс на свойстве регистра Проформа? Если нет - поставить. 2. ДЛя ИЗМЕНЕНИЯ <указать таблицу>. | |||
| 11
    
        Bober 13.06.18✎ 16:46 | 
        (8) в запросе нет явного или неявного использования других таблиц.     | |||
| 12
    
        Tateossian 13.06.18✎ 16:48 | 
        (0) Для изменения работает только в блоке инструкции НачатьТранзакцию() Зафиксирвоать транзакцию(). Смотрите, где есть в транзакции еще какие запросы к этому регистру. Возможно,транзакция очень большая и блокирующие запросы других сеансов пытаются конкурировать.     | |||
| 13
    
        hhhh 13.06.18✎ 16:49 | 
        (11) есть. Регистратор. До такой степени явное, что явнее не придумаешь.     | |||
| 14
    
        Tateossian 13.06.18✎ 16:50 | 
        (8) Нет, блокируются только то, что есть в операторе ИЗ.     | |||
| 15
    
        Bober 13.06.18✎ 16:50 | 
        (0) если таблица регистра большая и массово используется, то при таком запросе скорее всего будет полное сканирование таблицы. В этом случае и могут возникать ожидания на блокировку. Тем более если база 1с на автоматических блокировках.     | |||
| 16
    
        Alex_Kh_ua 13.06.18✎ 16:54 | 
        (15) Как это можно обойти?     | |||
| 17
    
        hhhh 13.06.18✎ 16:56 | 
        (16) пиши в ДЛЯ ИЗМЕНЕНИЯ только ту таблицу, которую действительно собираешься изменять     | |||
| 18
    
        Bober 13.06.18✎ 17:05 | 
        (16) 
 - поле регистра Проформа это измерение или реквизит? - у поля Проформа включено индексирование? | |||
| 19
    
        Alex_Kh_ua 13.06.18✎ 17:14 | 
        (18) - поле регистра Проформа это измерение или реквизит? Измерение.     | |||
| 20
    
        Alex_Kh_ua 13.06.18✎ 17:14 | 
        (18) - у поля Проформа включено индексирование? нет, не включено     | |||
| 21
    
        очко 13.06.18✎ 17:22 | 
        (0) а почему ты решил что именно этот запрос вызывает конфликт блокировок? Настраивай xevents на bpr (не забудь поставить Blocked Process Threshold) и смотри в bpr какой запрос вызывает блокировку и кто его ждет. По названиям таблиц поймешь какой это запрос из 1С и чего он делает.     | |||
| 22
    
        Tateossian 13.06.18✎ 17:34 | 
        (21) Он видимо решил что валится на нем, значит его и нужно оптимизировать. Совсем не слушает меня в (12).     | |||
| 23
    
        Alex_Kh_ua 13.06.18✎ 18:03 | 
        (21) не удалось найти внятную информацию о EXTENDED events на bpr (не забудь поставить Blocked Process Threshold), поделитесь пожалуйста информацией о реализации данного метода :)     | |||
| 24
    
        очко 13.06.18✎ 18:06 | ||||
| 25
    
        Alex_Kh_ua 13.06.18✎ 18:06 | 
        А кто может подсказать, насколько рабочий вот этот метод http://www.gilev.ru/timeoutlock/?     | |||
| 26
    
        Bober 13.06.18✎ 18:23 | 
        (20) включить индексирование.     | |||
| 27
    
        lodger 13.06.18✎ 18:36 | 
        (25) исправь (1), потом читай (12) до просвещения.
 у гилева тулза для конфиг которые работают, а не падают на самолоке. | |||
| 28
    
        xXeNoNx 13.06.18✎ 19:18 | 
        (0) 1. Перейти на управляемые блокировки
 2. Убрать из секции запроса ГДЕ - ВЫБОР и прочую хренотень, используй вместо этого ОБЪЕДИНИТЬ ВСЕ | |||
| 29
    
        Малыш Джон 13.06.18✎ 20:55 | 
        (0) 1. Это регистр накопления. Почему нельзя взять обороты с детализацией по регистратору и поставить хотя бы часть отборов в условиях виртуальной таблицы?
 2. условие "вид движения = расход или выбор блаблабла" достаточно медленное. Оно равнозначно условию "НЕ (ВидДвижения = Приход и Не Регистратор ссылка Док.КорректировкаПроформы и НЕ Регистратор ССЫЛКА Док.ДобавлениеКредитНоты)", которое работает побыстрее. Дискретная математика рулит. | |||
| 30
    
        xXeNoNx 13.06.18✎ 21:48 | 
        (29) "Почему нельзя взять обороты с детализацией по регистратору" - Запусти консоль с планом запроса и увидишь почему. И чем оно лучше выборки из физической таблицы в данном случае? 
 "...Док.КорректировкаПроформы и НЕ Регистратор ССЫЛКА Док.ДобавлениеКредитНоты)", которое работает побыстрее" - и почему же оно будет работать "побыстрее"? | |||
| 31
    
        Малыш Джон 13.06.18✎ 21:50 | 
        (30) "посмотри сам и увидишь" - это классный ответ)     | |||
| 32
    
        xXeNoNx 13.06.18✎ 21:53 | 
        + (29) КАК НЕ в запросе оптимизирует сам запрос?
 "Не Регистратор ссылка Док.КорректировкаПроформы" Аналогично ТипЗначения(Регистратор) <> ТИП(Док.КорректировкаПроформы), а знаешь что бывает за ">, <, <>" в запросе? | |||
| 33
    
        Малыш Джон 13.06.18✎ 22:04 | 
        (32) вот вообще не сдалось что-то тебе доказывать. Была уже здесь тема, что это не одно и то же. И условие в данном случае оптимизироваться так как ты написал, не будет.
 По поводу аналогичности простой выборки и оборотов - тоже нет, не одно и то же. Здесь могу тебе посоветовать воспользоваться твоим же советом - попробуй сам и сравни. Просто выборку с условием "ГДЕ Сделка=&Сделка" и "Обороты(,,Регистратор,Сделка=&Сделка)". И последнее: перейти на управляемые блокировки - это конечно хорошо, но я подозреваю, что потребуется n-ное количество еб#тни. Переделать запрос по моим советам и проверить - дело получаса. Это элементарно проще и быстрее. | |||
| 34
    
        xXeNoNx 13.06.18✎ 22:11 | 
        (33) Виртуальные таблицы всегда должны использовать отборы, касаемо детализации по регистратору, то зачем использовать вирт. таблицу, если туфтологически детализация идет по регистратору, Карл!
 "Переделать запрос по моим советам и проверить - дело получаса" - ну пусть переделает, проверит, а потом сделает как нужно... или нет... | |||
| 35
    
        Малыш Джон 13.06.18✎ 22:14 | 
        (34) наверное имел в виду "тавтологически"?  Детализация идет до записи. Это не одно и то же, по регистратору может быть множество записей.     | |||
| 36
    
        xXeNoNx 13.06.18✎ 22:22 | 
        (35) "тавтологически" - в том числе и эту хрень. 
 "Детализация идет до записи. Это не одно и то же, по регистратору может быть множество записей" - и? Как оно поможет ТС? Как оно оптимизирует запрос, Если в индексы попадать не будем? | |||
| 37
    
        xXeNoNx 13.06.18✎ 22:42 | 
        (35) вдогонку на поразмыслить во что превращается регистр оборотов с детализацией по регистратору:
 SELECT TOP 10 T1.RecorderTRef, T1.RecorderRRef FROM (SELECT T2.Период AS Period_, T2.Регистратор AS RecorderTRef, T2.Регистратор AS RecorderRRef, ISNULL(CAST(CAST(SUM(CASE WHEN T2.ВидДвижения = 0.0 THEN T2.Сумма ELSE 0.0 END) AS NUMERIC(21, 2)) AS NUMERIC(21, 2)),0.0) AS Fld4793Receipt_, ISNULL(CAST(CAST(SUM(CASE WHEN T2.ВидДвижения = 0.0 THEN 0.0 ELSE T2.Сумма END) AS NUMERIC(21, 2)) AS NUMERIC(21, 2)),0.0) AS Fld4793Expense_, ISNULL(CAST(CAST(SUM(CASE WHEN T2.ВидДвижения = 0.0 THEN T2.КОплате ELSE 0.0 END) AS NUMERIC(21, 2)) AS NUMERIC(21, 2)),0.0) AS Fld4794Receipt_, ISNULL(CAST(CAST(SUM(CASE WHEN T2.ВидДвижения = 0.0 THEN 0.0 ELSE T2.КОплате END) AS NUMERIC(21, 2)) AS NUMERIC(21, 2)),0.0) AS Fld4794Expense_, ISNULL(CAST(CAST(SUM(CASE WHEN T2.ВидДвижения = 0.0 THEN T2.КОтгрузке ELSE 0.0 END) AS NUMERIC(21, 2)) AS NUMERIC(21, 2)),0.0) AS Fld4795Receipt_, ISNULL(CAST(CAST(SUM(CASE WHEN T2.ВидДвижения = 0.0 THEN 0.0 ELSE T2.КОтгрузке END) AS NUMERIC(21, 2)) AS NUMERIC(21, 2)),0.0) AS Fld4795Expense_ FROM РегистрНакопления.РасчетыСКлиентами T2 WHERE T2.Активность = 0x01 GROUP BY T2.Период, T2.Регистратор, T2.Регистратор HAVING (ISNULL(CAST(CAST(SUM(CASE WHEN T2.ВидДвижения = 0.0 THEN T2.Сумма ELSE 0.0 END) AS NUMERIC(21, 2)) AS NUMERIC(21, 2)),0.0)) <> 0.0 OR (ISNULL(CAST(CAST(SUM(CASE WHEN T2.ВидДвижения = 0.0 THEN 0.0 ELSE T2.Сумма END) AS NUMERIC(21, 2)) AS NUMERIC(21, 2)),0.0)) <> 0.0 OR (ISNULL(CAST(CAST(SUM(CASE WHEN T2.ВидДвижения = 0.0 THEN T2.КОплате ELSE 0.0 END) AS NUMERIC(21, 2)) AS NUMERIC(21, 2)),0.0)) <> 0.0 OR (ISNULL(CAST(CAST(SUM(CASE WHEN T2.ВидДвижения = 0.0 THEN 0.0 ELSE T2.КОплате END) AS NUMERIC(21, 2)) AS NUMERIC(21, 2)),0.0)) <> 0.0 OR (ISNULL(CAST(CAST(SUM(CASE WHEN T2.ВидДвижения = 0.0 THEN T2.КОтгрузке ELSE 0.0 END) AS NUMERIC(21, 2)) AS NUMERIC(21, 2)),0.0)) <> 0.0 OR (ISNULL(CAST(CAST(SUM(CASE WHEN T2.ВидДвижения = 0.0 THEN 0.0 ELSE T2.КОтгрузке END) AS NUMERIC(21, 2)) AS NUMERIC(21, 2)),0.0)) <> 0.0) T1 | |||
| 38
    
        xXeNoNx 13.06.18✎ 22:43 | 
        (37) * регистр оборотов = вирт. таблица оборотов     | |||
| 39
    
        H A D G E H O G s 13.06.18✎ 22:44 | 
        ". Оно равнозначно условию "НЕ (ВидДвижения = Приход и Не Регистратор ссылка Док.КорректировкаПроформы и НЕ Регистратор ССЫЛКА Док.ДобавлениеКредитНоты)", которое работает побыстрее."
 Позабавило. | |||
| 40
    
        rozer76 13.06.18✎ 22:50 | 
        (0) режим блокировок конечно автоматический?     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |