Имя: Пароль:
1C
1С v8
Ошибка MSSQL - Transaction was deadlocked
0 ksergey
 
04.04.17
10:45
Добрый день.
Есть база 1С, из которой в базу сайта(на платформе MSSQL) выгружаются данные по договорам. После обновления данных в базе сайта последним шагом идет запуск сохраненной процедуры (её назначение мне не известно).

Последнее время стала возникать вот такая ошибка.

Ошибка при выполнении процедуры AgreeNumLike_upd  {Обработка.ВыгрузитьДанныеВБазуMSSQL.МодульОбъекта(1237)}:
Ошибка при вызове метода контекста (Execute):
Произошла исключительная ситуация (Microsoft SQL Server Native Client 10.0):
Transaction (Process ID 78) was deadlocked on lock | communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

Я понимаю, что это мертвая блокировка.
Поскольку у меня мало опыта работы непосредственно с SQL из 1с пож-та объясните схематично, как правильно работать в данном конкретном примере, чтобы избежать блокировок при выполнении  данной процедуры
1 Вафель
 
04.04.17
10:46
какая-то самописная обработка?
2 DrZombi
 
гуру
04.04.17
10:46
(0) Смотреть запросы надо... :)
3 Адинэснег
 
04.04.17
10:49
4 ksergey
 
04.04.17
11:01
>>какая-то самописная обработка?
да, выливает в базу сайта в соот-щую таблицу данные по договорам, после загрузки данных выполняется запуск этой самой процедуры, насколько я понимаю она заполняет поле поиска номера договора

>>Смотреть запросы надо
запросы самые обычные: заполнение таблицы договоров идет через INSERT или UPDATE, и затем запуск процедуры

но есть нюанс-данная обработка запускается через регламент из нескольких баз 1с, соот-но есть вероятность что время запуска может пересекаться (хотя данные договоров пересекаться не могут)
5 Вафель
 
04.04.17
11:03
(4) как ты хочешь что бы тебе помогли с какой то самописной  обработкой?
Сколько готов платить за решение?
6 Йохохо
 
04.04.17
11:12
(0) уменьшить количество элементов в транзакции
7 МихаилМ
 
04.04.17
11:22
перепешите хранимую процедуру или запускайте её отдельно
с проверкой что уже не запущена и ожиданием , когда отработает.
8 ksergey
 
04.04.17
11:23
>>уменьшить количество элементов в транзакции
в алгоритме не устанавливается явных транзакций, просто последовательно выполняется загрузка дынных(длится примерно 1-2мин) и далее запуск процедуры

поможет ли, если например запуск процедуры выполнить через установку явной транзакции ?
9 ksergey
 
04.04.17
11:43
>>как ты хочешь что бы тебе помогли с какой то самописной  обработкой?

мне нужна методологическая помощь-подсказать (более-менее детально) как решить эту проблему?
10 Йохохо
 
04.04.17
11:43
(8) похоже Вы не можете управлять кодом после "далее запуск процедуры", значит можно попробовать разбить выгрузку из 1с на части и после каждой запустить хранимку
11 Вафель
 
04.04.17
11:44
(9) сначала нужно собрать граф взаимоблокировки