Показать сообщение отдельно
Старый 08.12.2021, 12:49   #23  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,892 / 5650 (194) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Ладно - раз уж речь зашла о таблицах tempDB:
Как выяснилось, отключение функциональности Engineering Change в D365FO может очень прилично ускорить массовую вставку строк в складские журналы, заказы и sales quotation.
Есть такой метод: EngChgEcoResProductLifecycleStateRuleCheck::validateFilter(), который срабатывает при вставках в упомянутые выше таблицы. Этот метод копирует данные из таблицы в ее клон в tempDB и потом прогоняет запрос по этой временной копии. (можно у обычной, не временной таблицы вызвать метод vendTable.setTempDB() и система создаст tempDb-клон обычной таблицы) . Dispose() после этого не вызывается, соответственно на каждую вставку система генерирует уникальное новое имя временной таблицы, прогоняет по этой таблице запрос и тд. Если вставка идет в ручную (скажем - 300-400 строк заказов в час), то эти самые левые запросы в SQL Plan Cache погоды не делают. Если у нас имеется массовый импорт и мы пытаемся быстро залить скажем тысяч 20-30 строк, уникальные имена таблиц забивают Plan Cache, загоняя SQL Server на ёлку. (Кэш сбрасывается каждые 20-30 секунд и все запросы попадают на рекомпиляцию). Конечно скорость убивания SQL Server зависит от объема памяти на таковом и числа импортируемых строк, но вот например в моей VM, при ограничении размера памяти SQ Server в 8 Мб для того чтобы загнать сервер на ёлку достаточно было достаточно смешных 1500 строк в складских журналах...

Последний раз редактировалось fed; 08.12.2021 в 15:32.
За это сообщение автора поблагодарили: EVGL (8), sukhanchik (6).