Конфликт блокировок при выполнении транзакции (1С:БУС)
Доброго дня.
Есть вот такая шляпа:
src\basic\src\DocumentLogFormObjController.cpp(884):
afd2b550-0d52-4e03-b448-15ed68d87ac5
0d2200af-1696-4395-91e5-2872675e6d3d: Ошибка при выполнении обработчика - 'ОбработкаПроведения'
8d366056-4d5a-4d88-a207-0ae535b7d28e: Ошибка при вызове метода контекста (Записать)
{ОбщийМодуль.ПроведениеСерверУТ.Модуль(355)}: Объект.Движения.Записать();
{Документ.ПриходныйОрдерНаТовары.МодульОбъекта(101)}: ПроведениеСерверУТ.ЗаписатьНаборыЗаписей(ЭтотОбъект);
f08d92f8-9eb2-4e19-9dd9-977d907cec2d: Ошибка при выполнении обработчика - 'ПередЗаписью'
0d2200af-1696-4395-91e5-2872675e6d3d: Ошибка при выполнении обработчика - 'ПередЗаписью'
8d366056-4d5a-4d88-a207-0ae535b7d28e: Ошибка при вызове метода контекста (ЗарегистрироватьИзменения)
{ОбщийМодуль.Б_ОбменССайтомСервер.Модуль(566)}: ПланыОбмена.ЗарегистрироватьИзменения(МассивУзловТовары, Запись.Номенклатура);
{ОбщийМодуль.Б_ОбменССайтомСервер.Модуль(175)}: ЗарегистрироватьИзменения(Источник, Замещение);
{ОбщийМодуль.ПроведениеСерверУТ.Модуль(355)}: Объект.Движения.Записать();
{Документ.ПриходныйОрдерНаТовары.МодульОбъекта(101)}: ПроведениеСерверУТ.ЗаписатьНаборыЗаписей(ЭтотОбъект);
f08d92f8-9eb2-4e19-9dd9-977d907cec2d
dc31263e-ecbf-41bd-9b3a-7b55897d5fd6: Конфликт блокировок при выполнении транзакции:
Microsoft SQL Server Native Client 11.0: Lock request time out period exceeded.
HRESULT=80040E31, SQLSrvr: SQLSTATE=HYT00, state=33, Severity=10, native=1222, line=1
Показать
Я много раз видел ошибки с блокировками с планами обмена, но они были связаны с тем, что использовался метод ВыбратьИзменения(). У меня же типовой модуль Битрикса 7 редакции и УТ11.4.
Там изменения получаются запросом! Далее складываются в пакеты, пакеты в файлы, файлы уже идут в Битрикс.
Я не пойму, в чем проблема то?
Хотя, вижу, что судя по ошибке, проблема связана с узлом "Товары"
А в товарах у нас всегда множество изменений, ведь регистрируется там почти вся номенклатура из-за того, что меняется количество, цена, сегмент ... все эти телодвижения регистрируют номенклатуру к выгрузке и получаем ~10к номенклатуры в узле Б (выгрузка изменений каждый час). Сейчас думаю, чтобы исправить это на уровне регистрации к выгрузке. Правильно ли я двигаюсь?
Есть вот такая шляпа:
src\basic\src\DocumentLogFormObjController.cpp(884):
afd2b550-0d52-4e03-b448-15ed68d87ac5
0d2200af-1696-4395-91e5-2872675e6d3d: Ошибка при выполнении обработчика - 'ОбработкаПроведения'
8d366056-4d5a-4d88-a207-0ae535b7d28e: Ошибка при вызове метода контекста (Записать)
{ОбщийМодуль.ПроведениеСерверУТ.Модуль(355)}: Объект.Движения.Записать();
{Документ.ПриходныйОрдерНаТовары.МодульОбъекта(101)}: ПроведениеСерверУТ.ЗаписатьНаборыЗаписей(ЭтотОбъект);
f08d92f8-9eb2-4e19-9dd9-977d907cec2d: Ошибка при выполнении обработчика - 'ПередЗаписью'
0d2200af-1696-4395-91e5-2872675e6d3d: Ошибка при выполнении обработчика - 'ПередЗаписью'
8d366056-4d5a-4d88-a207-0ae535b7d28e: Ошибка при вызове метода контекста (ЗарегистрироватьИзменения)
{ОбщийМодуль.Б_ОбменССайтомСервер.Модуль(566)}: ПланыОбмена.ЗарегистрироватьИзменения(МассивУзловТовары, Запись.Номенклатура);
{ОбщийМодуль.Б_ОбменССайтомСервер.Модуль(175)}: ЗарегистрироватьИзменения(Источник, Замещение);
{ОбщийМодуль.ПроведениеСерверУТ.Модуль(355)}: Объект.Движения.Записать();
{Документ.ПриходныйОрдерНаТовары.МодульОбъекта(101)}: ПроведениеСерверУТ.ЗаписатьНаборыЗаписей(ЭтотОбъект);
f08d92f8-9eb2-4e19-9dd9-977d907cec2d
dc31263e-ecbf-41bd-9b3a-7b55897d5fd6: Конфликт блокировок при выполнении транзакции:
Microsoft SQL Server Native Client 11.0: Lock request time out period exceeded.
HRESULT=80040E31, SQLSrvr: SQLSTATE=HYT00, state=33, Severity=10, native=1222, line=1
Я много раз видел ошибки с блокировками с планами обмена, но они были связаны с тем, что использовался метод ВыбратьИзменения(). У меня же типовой модуль Битрикса 7 редакции и УТ11.4.
Там изменения получаются запросом! Далее складываются в пакеты, пакеты в файлы, файлы уже идут в Битрикс.
Я не пойму, в чем проблема то?
Хотя, вижу, что судя по ошибке, проблема связана с узлом "Товары"
ПланыОбмена.ЗарегистрироватьИзменения(МассивУзловТовары, Запись.Номенклатура).
А в товарах у нас всегда множество изменений, ведь регистрируется там почти вся номенклатура из-за того, что меняется количество, цена, сегмент ... все эти телодвижения регистрируют номенклатуру к выгрузке и получаем ~10к номенклатуры в узле Б (выгрузка изменений каждый час). Сейчас думаю, чтобы исправить это на уровне регистрации к выгрузке. Правильно ли я двигаюсь?
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(12) есть запрос выгрузки, где идёт обращение к табличке изменений Номенклатуры, что б понимать, чего помимо самой номенклатуры летит в обмен ?
Если там остатки/цены..то имеет смысл выкинуть регистрацию самой номенклатуры со всех доков, и тупо (если она так нужна), получать её с тех же доков за период потом запросом при обмене.
Если там остатки/цены..то имеет смысл выкинуть регистрацию самой номенклатуры со всех доков, и тупо (если она так нужна), получать её с тех же доков за период потом запросом при обмене.
Можно попробовать найти что с чем заблокировалось в момент выгрузки:
На SQL пособирать события:
lock_timeout_greater_than_0
rpc_completed
sql_batch_completed
lock_escalation
lock_acquired
Для 1С ТЖ
<?xml version="1.0"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="Ваш путь" history="8">
<event>
<eq property="name" value="DBMSSQL"/>
</event>
<event>
<eq property="name" value="SDBL"/>
</event>
<event>
<eq property="name" value="CALL"/>
</event>
<event>
<eq property="name" value="EXCP"/>
</event>
<event>
<eq property="name" value="EXCPCNTX"/>
</event>
<property name="all"/>
</log>
</config>
С событий SQL- ТЖ найдете код с которым блокируется, может тоже регламентное задание и сможете разнести по времени или подкорректировать код.
Для правок типового можно расширением обойтись и написать разрабам конфы о проблеме блокировок для исправления на постоянке.
На SQL пособирать события:
lock_timeout_greater_than_0
rpc_completed
sql_batch_completed
lock_escalation
lock_acquired
Для 1С ТЖ
<?xml version="1.0"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="Ваш путь" history="8">
<event>
<eq property="name" value="DBMSSQL"/>
</event>
<event>
<eq property="name" value="SDBL"/>
</event>
<event>
<eq property="name" value="CALL"/>
</event>
<event>
<eq property="name" value="EXCP"/>
</event>
<event>
<eq property="name" value="EXCPCNTX"/>
</event>
<property name="all"/>
</log>
</config>
С событий SQL- ТЖ найдете код с которым блокируется, может тоже регламентное задание и сможете разнести по времени или подкорректировать код.
Для правок типового можно расширением обойтись и написать разрабам конфы о проблеме блокировок для исправления на постоянке.