Конфликт блокировок при выполнении транзакции

1. nusenka 16.09.20 17:05 Сейчас в теме
Всем добрый день! Часто, после того, как я добавляю запрос, начинает периодически появляться ошибка "Конфликт блокировок при выполнении транзакции". Либо при выполнении самого запроса, либо при обращении к объекту, который используется в запросе. Видимо проблемы в запросе. Уже читала по этому поводу, пробовала переписать запрос, но не помогает. Подскажите, пожалуйста, на что нужно обратить внимание?
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
8. nusenka 16.09.20 20:10 Сейчас в теме
Сегодня настолько всё заблокировалось, что эта ошибка выскакивала и при загрузке, пришлось перезапустить Агент сервера, ничего не помогало. Где, что нужно исправлять, не представляю... Только убрать все мои изменения.
2. FatPanzer_Job 5 16.09.20 17:10 Сейчас в теме
Как долго выполняется запрос?
4. nusenka 16.09.20 17:57 Сейчас в теме
(2)запрос выполняется быстро, но видимо объект оказывается заблокирован в это время.
5. TODD22 19 16.09.20 18:00 Сейчас в теме
(4)Куда "добавляете" запрос, в какой момент он у вас выполняется? Что за запрос? Что в этот момент происходит по мимо выполнения запроса?
7. nusenka 16.09.20 20:06 Сейчас в теме
(5)В данном случае Запрос выполняется в процедуре создания задач. Не понятно, почему объект заблокирован, ругается на метод Записать. До этого дрбавляла запрос в процедуру ПередЗаписью документа, тоже была такая ошибка, и периодически повторяется. Именно сейчас нет возможности зафиксировать.
Прикрепленные файлы:
9. FatPanzer_Job 5 16.09.20 20:11 Сейчас в теме
(7) Вы хотите записать удаленную задачу как выполненную?
11. nusenka 16.09.20 20:14 Сейчас в теме
(9)Нет, не удаленную задачу, а задачу, по которой документ (ОбъектЗадачи) был помечен на удаление или проведен.
3. herfis 372 16.09.20 17:41 Сейчас в теме
"Превышено максимальное время ожидания"?
Запрос в обработку проведения "добавляете"?
Блокировки автоматические?
6. nusenka 16.09.20 20:02 Сейчас в теме
(3)В событие ПередЗаписью добавляла до этого, Сейчас - в процедуру создания задач. Не знаю, какие блокировки, как это узнать? На скрине ошибка и место ошибки в данном случае. Оугается на .Записать, хотя кем он заблокирован и почему, не понятно. Это точно из-за моих изменений, раньше не было вообще такого.
Прикрепленные файлы:
10. FatPanzer_Job 5 16.09.20 20:12 Сейчас в теме
(6) И с какой частотой вы запускаете данное регламентное задание?
12. nusenka 16.09.20 20:17 Сейчас в теме
(10)600 сек и при обновлении списка задач, при открытии формы задач
13. TODD22 19 16.09.20 21:15 Сейчас в теме
(12) А что перед запросом делаете, покажите код?
У вас обменов никаких нет?
14. МихаилМ 16.09.20 22:38 Сейчас в теме
объектзадачи нужно типизировать
15. nusenka 16.09.20 22:59 Сейчас в теме
Из-за этого происходят блокировки? Как это сделать?
16. herfis 372 17.09.20 09:13 Сейчас в теме
(15) Я бы попробовал для начала две вещи.
1. Переписать запрос для избавление от "ИЛИ" в условии - сделать объединение двух однотипных подзапросов в одном из которых "И" на "Проведен", а в другом "И" на "ПометкаУдаления".
2. Добавить индекс по "Выполнена" (в палитре свойств - "Индексировать")
И первое и второе способно помочь сузить диапазоны внутренних блокировок SQL-сервера при выполнении запроса. Для начала попробуйте первое - оно в любом случае лишним не будет (и это довольно стандартный прием оптимизации критичных запросов, правда больше по производительности, чем по блокировкам). Индекс добавить всегда успеете (и еще не факт, что он окажется достаточно селективным и принесет реальную пользу).
17. herfis 372 17.09.20 09:25 Сейчас в теме
(15) Только заметил. Выше правильно обратили внимание на обращение через точку к объекту задачи. Это очень неприятный момент, которого следует избегать при разработке архитектуры приложения (аналогичен обращению через точку к реквизитам регистратора). Так как при этом системе приходится делать неявное соединение с таблицами всех объектов, ссылки на которые может содержать объект задачи. Скорее всего основная причина "широкого поля блокировок" как раз в этом.
Идеальное решение - вынести нужный признак в реквизиты самой задачи (менять его при изменении состояния объекта задачи). Тогда этот запрос не будет делать никаких соединений и будет работать только таблицей задач. Вам предложили промежуточный вариант оптимизации, если ваш запрос актуален только для некоторых типов объектов задач из всех возможных. Тогда с помощью ВЫРАЗИТЬ можно явно указать, к какому именно виду документа объекта задач вы обращаетесь. В этом случае система не будет затрагивать в запросе остальные таблицы документов, которые может содержать ОбъектЗадачи.
Оставьте свое сообщение
Вопросы с вознаграждением