![]() |
#1 |
Участник
|
Тормоза на ровном месте при инициализации формы резервирования
Люди добрые! Помогите!!!
Не могу поймать кота за хвост. ![]() Уже продолжительное время не могу вычислить причину "самопроизвольного" увеличения времени исполнения запросов при инициализации или рефреше формы резервирования товара. Исходные данные такие: Axapta 2.5 RU SP5 База данных: Microsoft SQL Server 2005 Железо новое и нормальное. Проблем с ним нет. Переиндексация - раз в неделю. Сбор статистики - 2 раза в неделю. Симптомы. После некоторого промежутка времени с нормальной работой (от нескольких дней до нескольких часов) форма резервирования начинает жутко тормозить. А через время опять все становиться нормально. Практически постоянно мониторю ситуацию. Наблюдения показывают, что загрузка сервера к развитию событий отношения не имеет. Во время тормозов через PerfMon вижу резкий скачек IndexSearch. Остальные параметры в норме. Трассировка запросов средствами Аксапты показывает что наибольшее время исполнения имеют 6 одинаковых запросов: Цитата:
Расчет времени: 5126 мс на 'EXECUTE+FETCH (execute, first chunk of data)'
SQL запрос: SELECT SUM(A.COSTAMOUNTPOSTED),SUM(A.COSTAMOUNTADJUSTMENT),SUM(A.QTY) FROM INVENTTRANS A,INVENTDIM B WHERE ((A.DATAAREAID=?) AND ((((A.ITEMID=?) AND (A.CONFIGID=?)) AND (A.STATUSISSUE=?)) AND (A.STATUSRECEIPT=?))) AND ((B.DATAAREAID=?) AND ((((B.INVENTDIMID=A.INVENTDIMID) AND (B.INVENTLOCATIONID=?)) AND (B.INVENTBATCHID=?)) AND (B.INVENTGTDID_RU=?))) OPTION(FAST 5,LOOP JOIN) [Идентификатор=9885, Использовано повторно=Да] Может вопрос и глупый, но я уже не знаю на что еще нужно обратить внимание что бы разобраться с проблемой. ![]() |
|
![]() |
#2 |
Moderator
|
Если используются placeholders (то есть вопросики, а не конкретные значения), статистика по большей части просто не используется. Например - если у тебя в запросе стоит значение statusReceipt==3, система может посмотреть в статистике гистограмму распределения значений и оценить что по этому условию отбирается всего 1-2% таблицы inventTrans. А вот если в запросе стоит statusReceipt==?, то система смотрит что всего поле statusReceipt может принимать 7 возможных значений, соответственно - по этому условию будет отобрана 1/7 от выборки.
Поэтому прежде чем чего-либо делать дальше, рекомендую в этом запросе тупо подставить forceLiterals и посмотреть чего будет... |
|
![]() |
#3 |
----------------
|
Цитата:
Например, сначала вы искали проводки по партии (использовался индекс по партиям), а потом стали искать по ГТД (и опять используется индекс по партиям). Цитата:
прежде чем чего-либо делать дальше, рекомендую в этом запросе тупо подставить forceLiterals и посмотреть чего будет
|
|
![]() |
#4 |
Участник
|
1. Попробуйте убрать из запроса в Аксапте forceNestedLoop
2. Проанализируйте в Managment Studio план выполнения этого запроса в "быстром"/"медленном" варианте и если они различаются, то пропишите в запрос хинт с индексом из "быстрого" плана. 3. В качестве "лома" можно попробовать покрывающий индекс на InventTrans: - ItemId - StatusIssue - StatusReceipt - ConfigId - InventDim - Qty - CostAmountPosted - CostAmountAdjustment Можно дополнить имеющийся индекс, главное использовать такую последовательность полей. PS. Начинать лучше всего, на мой взгляд, с анализа планов выполнения запроса. PS2. А так ли нужна вам себестоимость в форме резервирования, может выкинуть ее? |
|
![]() |
#5 |
Moderator
|
Цитата:
Сообщение от Wamr
![]() Не согласен с данным утверждением. При первом вызове такого запроса статистика используется и строится корректный план исполнения, а вот при повторном использовании план сохраняется, что и может приводить к подобным эффектам.
Например, сначала вы искали проводки по партии (использовался индекс по партиям), а потом стали искать по ГТД (и опять используется индекс по партиям). а с этим согласен ![]() ![]() Последний раз редактировалось fed; 29.06.2008 в 21:51. |
|
![]() |
#6 |
Участник
|
Спасибо всем.
Действительно, пока попробую повторно внимательно проанализировать планы запросов при нормальной работе и с "тормозами". |
|
![]() |
#7 |
----------------
|
Обращаю внимение, что имеет смысл анализировать планы запросов полученные MS SQL Profiler-ом, а не Аксаптой
|
|
![]() |
#8 |
Участник
|
|
|
![]() |
#9 |
Участник
|
Цитата:
![]() |
|
![]() |
#10 |
Участник
|
|
|
![]() |
#11 |
Участник
|
Цитата:
Особенно вот эти поля настораживают. - Qty - CostAmountPosted - CostAmountAdjustment |
|
![]() |
#12 |
Участник
|
Цитата:
Цитата:
![]() ![]() |
|
![]() |
#13 |
Участник
|
|
|
![]() |
#14 |
Участник
|
А INCLUDE поля - это чо за зверь ?
Чем они в данной ситуации полезны ? |
|
![]() |
#15 |
Участник
|
|
|
![]() |
#16 |
----------------
|
|
|
![]() |
#17 |
Участник
|
|
|
Теги |
ax2.5 |
|
![]() |
||||
Тема | Ответов | |||
Создание Lookup формы | 9 | |||
Крэш на ровном месте | 12 | |||
setFocus в момент инициализации формы | 3 | |||
Русская локализация Axapta 3 ? | 59 | |||
Динамические Lookup формы. | 0 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|