v7: Ошибка блокировки данных на SQL сервере (deadlock) #571082


#0 by МастерВопросов
День добрый! Из одной базы делается прямой запрос через OLEDB к SQL-ой базе на 1С77, в это время в базе работают много пользователей. До недавнего времени запрос работал нормально, но последнее время довольно часто (но не всегда) стал вылетать с ошибкой: Ошибка при выполнении обработчика - 'ПриКомпоновкеРезультата' по причине: {Отчет.НашОтчет.МодульОбъекта(1532)}: Ошибка при вызове метода контекста (Execute)        Recordset = Command.Execute;     по причине: Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Transaction (Process ID 66) was deadlocked on thread | communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction. Запрос строится к таблицам регистра Поставщики, Покупатели, справочнику Договора. Подскажите где копать, в чем может быть ошибка? З.Ы.: На компе разоварчиваю копию двух этих баз, в "рабочей" базе запсукаю по циклу перепроведение документов за период запроса, во второй базе злополучный отчет - никаких deadlock-ов не происходит и документы проводятся нормально и отчет во второй базе строится. Единственное отличие у меня копия базы крутится на SQL2005, а настоящая база на SQL2000.
#1 by Ёпрст
хинт nolock используешь в тексте запроса ?
#2 by МастерВопросов
да
#3 by МастерВопросов
может таймаут другой поставить? "        Command = Новый COMОбъект("ADODB.Command");
#4 by МастерВопросов
#5 by Ёпрст
и.. нахрена ado использовать ?!
#6 by Ёпрст
+5 а всё вижу, это запрос из снеговика к клюшкам.
#7 by МихаилМ
deadlocks Involving Parallelism промеряется (и лечится)
#8 by МихаилМ
+ не вооруженным глазом видно , что часть джоинов нужно вынести за union
#9 by МастерВопросов
OPTION(MAXDOP 1) - включить однопроцессорный режим? И отключить четыре четырехядерных процессора... на это я пойтить не могу.
#10 by Ёпрст
можешь так сделать: sp_configure 'show advanced options', 1; GO RECONFIGURE WITH OVERRIDE; GO sp_configure 'max degree of parallelism', 1; GO RECONFIGURE WITH OVERRIDE; GO
#11 by МихаилМ
максдоп для проверки добавить в текст запроса хотя итак понятно, что проблема в блокировке при распараллеливании хотите распарралелить - перепишите этот отратительный запрос. в оциях сервера изменять  не к чему. хотя есть рекрмендации олтп не параллелить.
#12 by МастерВопросов
А, вообще, как думаете это запрос сам себя блокирует, или какая то деятельность пользователей в базе мешает выполняться запросу?
#13 by Ёпрст
уриба нет случаем ?
#14 by Ёпрст
да и код, переписал бы что ли..
#15 by Ёпрст
весь.
#16 by МихаилМ
самоблокировка в запросе скорее всего если запрос запустить из ssms получите другой текст ошибки типа Intra-query parallelism caused your server command (process ID ...) to deadlock
#17 by МастерВопросов
да, на рабочей базе (к которой запрос строится) есть!
#18 by МастерВопросов
переписал запрос, в понедельник будут полоевые испытания:
#19 by МастерВопросов
кстати, как SCL сервер относится к запросам с одноименными таблицам типа: ...        |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID   ...        |UNION ALL ...        |    INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID          |    inner join _1sjourn as Журнал (nolock) on Журнал.iddoc = ПокупателиДвижения.iddoc ...        |UNION ALL ...                        INNER JOIN sc172 AS Контрагенты (nolock) ON Договоры.PARENTEXT = Контрагенты.ID          |    inner join _1sjourn as Журнал (nolock) on Журнал.iddoc = ПокупателиДвижения.iddoc
#20 by val
Альясы давай разные: и проблем не будет никогда
#21 by МастерВопросов
я так и сделал в
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С