07.11.2006, 15:15 | #1 |
Участник
|
Производительность запроса в отчете
Ax3.0sp2 на MSSQL2kSP3:
Есть отчет (по custInvoiceJour + custInvoiceTrans, но это не имеет особого значения). Наворотов нет, то есть квери и отчет подготавливаются базовыми классами, фетчится и выводится. В запросе отчета, присоединяются еще 2 таблицы и строится отчет за ПЕРИОД по СКЛАДУ1, по которому идет основная отгрузка (+ еще некоторые параметры). Время отрытия курсора несколько секунд, далее построение отчета. Если в этом же запросе меняется только СКЛАД на редко используемый (например БРАК - записей по этому складу за заданный период нет). запрос на выборку отрабатывает 2 с лишним минуты!!! (индекс по датам есть) Собственно вопрос почему и что делать??? Мониторил средствами аксапты и профайлером. План исполнения хороший (индексы по всем связкам). В QA запрос отрабатывает пару сек. с любым складом. Профайлер действительно подтвержает что запрос из Axapta исполнялся порядка 150 сек. Eдинственное отличие в том что Axapta использует cursor functionality of ADO, OLE DB, ODBC; а QA Батчем напрямую. И еще: количество чтений (Number of page reads issued by the RPC) при исполнении запроса Axapta порядка 1,500,000 и этот же запрос QA порядка 200,000. Не пойму в чем причина такой разницы???
__________________
--- SHiSHok Последний раз редактировалось SHiSHok; 07.11.2006 в 16:47. |
|
07.11.2006, 15:28 | #2 |
Злыдни
|
А в QA Вы добавляли option (fast xxx)? Там порядок объединения меняется, скорее всего.
|
|
07.11.2006, 15:34 | #3 |
Участник
|
да. Сначала анализировал запрос выдаваемый монитором запросов Axapta, потом для верности из профайлера взял - идентичны. FirstFast пробовал - результат тотже.
__________________
--- SHiSHok |
|
07.11.2006, 15:39 | #4 |
Злыдни
|
А статистику на SQL сервере пробовали принудительно обновить?
|
|
07.11.2006, 15:43 | #5 |
Участник
|
угу, with fullscan по CustInvoiceJour (собственно по ней стоит критерий по ДАТАм, есть индекс по датам и нет проводок за задаваемый период)
__________________
--- SHiSHok |
|
07.11.2006, 15:51 | #6 |
Злыдни
|
Я говорил о процедуре sp_updatestats, которая пересобирает статистику по всем таблицам. Обновление статистики только по одной из таблиц в соединении может не дать результата: связка Axapta + SQL может не изменить план запроса. Дополнительно надо глянуть на состояние отметок "Literals in ..." в настройках сервера AOS.
|
|
07.11.2006, 16:18 | #7 |
Участник
|
Цитата:
Сообщение от KiselevSA
Я говорил о процедуре sp_updatestats, которая пересобирает статистику по всем таблицам. Обновление статистики только по одной из таблиц в соединении может не дать результата: связка Axapta + SQL может не изменить план запроса. Дополнительно надо глянуть на состояние отметок "Literals in ..." в настройках сервера AOS.
__________________
--- SHiSHok |
|
07.11.2006, 16:43 | #8 |
Злыдни
|
Небольшой совет: попробуйте добавить в CustInvoiceTrans индекс для ускорения, содержащий ItemId, SalesId и InventDimId. Во многих случаях такое сочетание дает прирост в скорости в десятки раз.
|
|
07.11.2006, 17:05 | #9 |
Участник
|
проблема разрешилась
Цитата:
А на счет добавления индекса вопрос в использовании данной комбинации при обращениях к таблице.Недавний анализ активности IndexTuningWizard-ом не предложил добавок к существующим индексам. PS: автообновление статистики всех таблиц стоит еженедельно with resample , но видимо этого недостаточно.
__________________
--- SHiSHok |
|
07.11.2006, 17:21 | #10 |
Злыдни
|
Ну не знаю, как на счет ITW, но оптимальным вариантом поиска отсутствующих индексов является мониторинг длительных запросов с выводом в log. Установить у пользователей порог, например, в 3000 мс. А потом анализировать саму логику запроса и то место, откуда он пришел. В больших выборках помогает принудительное управление способом выборки (см. http://axapta.mazzy.ru/lib/literals_vs_placeholders/)
|
|
|
За это сообщение автора поблагодарили: kashperuk (3). |
07.11.2006, 17:36 | #11 |
Участник
|
Цитата:
Сообщение от KiselevSA
Ну не знаю, как на счет ITW, но оптимальным вариантом поиска отсутствующих индексов является мониторинг длительных запросов с выводом в log. Установить у пользователей порог, например, в 3000 мс. А потом анализировать саму логику запроса и то место, откуда он пришел. В больших выборках помогает принудительное управление способом выборки (см. http://axapta.mazzy.ru/lib/literals_vs_placeholders/)
Eще одна ситуация с которой я не разобрался - это почему иногда "слетает" статистика на таблицах. как результат вопли пользователей про "тормоза". решение - обновление статистики по таблицам в запросе (в основном это форма быстрого ввода заявки с основными справочниками: InventTable, InventDim, InventTableModule, InventBatch) PS: Вадиму за его труды отдельное спасибо.
__________________
--- SHiSHok Последний раз редактировалось SHiSHok; 07.11.2006 в 17:37. Причина: добавка |
|
|
За это сообщение автора поблагодарили: kashperuk (3). |
07.11.2006, 17:55 | #12 |
Злыдни
|
Земечено "слетание" статистики при удалении данных в таблице. Похоже, что распределение данных в статистике при удалении строк из таблицы становится совсем неверным. Именно поэтому в стандартные процедуры обслуживания SQL включаю пересбор статистики по всем таблицам ночью. На всех перечисленных Вами таблицах нам пришлось добавлять свои индексы SpeedUpIdx
|
|
07.11.2006, 18:19 | #13 |
Участник
|
Но вот в том то и делао что в форме быстрого ввода используются почти одни справочные таблицы, которые только плавно растут. Индексы у нас фактически на всех используемых таблицах добавлены/модифицированы для эффективной работы поставленного функционала.
__________________
--- SHiSHok |
|
08.11.2006, 17:53 | #14 |
Участник
|
Почти - это с остатками в разрезе складских аналитик небось ?
|
|
13.11.2006, 19:04 | #15 |
Участник
|
угу, InventSum просто растет; Dim, Serial, Batch как справочники тоже тупо растут, так что менее всего ожидать "слета" статистики у них приходилось.
__________________
--- SHiSHok Последний раз редактировалось SHiSHok; 14.11.2006 в 12:58. |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Изменить план выполнения запроса | 2 | |||
Вопрос по формированию запроса | 3 | |||
Динамические контролы в отчете основанные на display-методе | 19 | |||
dialog в отчёте | 6 | |||
Установка Range в отчёте | 13 |
|