Показать сообщение отдельно
Старый 21.08.2019, 15:45   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
А чтение данных из модели никто не пробовал оптимизировать ?
Там такие же безумные тысячи запросов через вызовы хранимых процедур.
Хранимки нам доступны, можно переписать как душе угодно.

Например при запросе к [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt]
(а именно эта хранимка самая популярная при начитке узлов AOT)
в случае обращения к EDT или полям таблички передается параметр LoadType = 273
т.е. начитывается заодно и исходный текст узла, которого в данном случае нет по определению, т.е. лишний outer join идет. Можно его убрать. Ну и.т.д.

Все можно пофиксить, поправив текст времянки, делая в зависимости от типа объекта разный запрос.

Правда начитка EDT - это мелочи по сравнению с начитыванием методов таблиц при открытии форм. Вот на них и идут основные запросы. Каждый табличный метод отдельным вызовом типа такого (похоже начитываются все методы таблички, даже если они не используются) :

X++:
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'buf2con',15,5,1,273
А для всей таблички так:
X++:
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'buf2con',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'canSubmitToWorkflow',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'caption',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'clear',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'con2buf',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'defaultField',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'defaultRow',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'equal',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'fieldAccessRight',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'fieldBufferAccessRight',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'getAllowRedefault',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'getDefaultingDependencies',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'getExtension',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'getPresenceFieldData',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'getSQLStatement',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'helpField',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'initValue',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'isFormDataSource',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'modifiedField',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'modifiedFieldValue',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'postCacheLoad',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'postLoad',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'preRemoting',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'setSQLTracing',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'setXDSContext',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'tableAccessRight',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'tableBufferAccessRight',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'takeOwnershipOfTempDBTable',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'toolTipField',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'toolTipRecord',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'useExistingTempDBTable',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'validateDelete',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'validateField',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'validateFieldValue',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'validateWrite',15,5,1,273
exec [AXJW12_TEST_model].[dbo].[XU_ReadHeaderExt] 12,30441,0,N'xml',15,5,1,273
и это только начитка методов. (Без учета полей, индексов, групп полей, EDT в полях)
А если там 100 методов ? То будет 100 запросов.
А табличка там не одна. В некоторых стандартных формах по десятку и больше датасорсов нагромождено.

Правила построения запросов SQL, когда за один запрос лучше получать всю выборку ?
Не, не слышали такого


Правда справедливости ради скажу, что когда трассировал открытие формы то из 6 секунд время выполнения этих запросов было порядка 1,5 секунд. Остальные 4,5 секунды аос что-то думал внутри себя. возможно раскладывал это все в кешах. Но есть вероятность того что профайлер не совсем точно время посчитал. Тем более что длительность каждого запроса была 0,120 - 0,180 миллисекунд.

Сразу добавлю, что времена привожу по начитке формы из AOT т.е. из базы модели.
Запрос самих данных в БД - это отдельная тема, время на это сюда не включено и там все было нормально.

Последний раз редактировалось Logger; 21.08.2019 в 16:14.
За это сообщение автора поблагодарили: raz (5), sukhanchik (5), chunga_changa (1).