|
|
Ошибка 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) сначала нужно собрать граф взаимоблокировки
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший