28.06.2008, 13:44 | #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, Использовано повторно=Да] Может вопрос и глупый, но я уже не знаю на что еще нужно обратить внимание что бы разобраться с проблемой. |
|
28.06.2008, 15:20 | #2 |
Moderator
|
Если используются placeholders (то есть вопросики, а не конкретные значения), статистика по большей части просто не используется. Например - если у тебя в запросе стоит значение statusReceipt==3, система может посмотреть в статистике гистограмму распределения значений и оценить что по этому условию отбирается всего 1-2% таблицы inventTrans. А вот если в запросе стоит statusReceipt==?, то система смотрит что всего поле statusReceipt может принимать 7 возможных значений, соответственно - по этому условию будет отобрана 1/7 от выборки.
Поэтому прежде чем чего-либо делать дальше, рекомендую в этом запросе тупо подставить forceLiterals и посмотреть чего будет... |
|
28.06.2008, 21:57 | #3 |
----------------
|
Цитата:
Например, сначала вы искали проводки по партии (использовался индекс по партиям), а потом стали искать по ГТД (и опять используется индекс по партиям). Цитата:
прежде чем чего-либо делать дальше, рекомендую в этом запросе тупо подставить forceLiterals и посмотреть чего будет
|
|
29.06.2008, 17:17 | #4 |
Участник
|
1. Попробуйте убрать из запроса в Аксапте forceNestedLoop
2. Проанализируйте в Managment Studio план выполнения этого запроса в "быстром"/"медленном" варианте и если они различаются, то пропишите в запрос хинт с индексом из "быстрого" плана. 3. В качестве "лома" можно попробовать покрывающий индекс на InventTrans: - ItemId - StatusIssue - StatusReceipt - ConfigId - InventDim - Qty - CostAmountPosted - CostAmountAdjustment Можно дополнить имеющийся индекс, главное использовать такую последовательность полей. PS. Начинать лучше всего, на мой взгляд, с анализа планов выполнения запроса. PS2. А так ли нужна вам себестоимость в форме резервирования, может выкинуть ее? |
|
29.06.2008, 21:47 | #5 |
Moderator
|
Цитата:
Сообщение от Wamr
Не согласен с данным утверждением. При первом вызове такого запроса статистика используется и строится корректный план исполнения, а вот при повторном использовании план сохраняется, что и может приводить к подобным эффектам.
Например, сначала вы искали проводки по партии (использовался индекс по партиям), а потом стали искать по ГТД (и опять используется индекс по партиям). а с этим согласен Последний раз редактировалось fed; 29.06.2008 в 21:51. |
|
30.06.2008, 10:54 | #6 |
Участник
|
Спасибо всем.
Действительно, пока попробую повторно внимательно проанализировать планы запросов при нормальной работе и с "тормозами". |
|
30.06.2008, 12:53 | #7 |
----------------
|
Обращаю внимение, что имеет смысл анализировать планы запросов полученные MS SQL Profiler-ом, а не Аксаптой
|
|
01.07.2008, 11:58 | #8 |
Участник
|
|
|
01.07.2008, 11:59 | #9 |
Участник
|
Как бы нам этим ломом не убить другие запросы. Индекс уж очень тяжелый получается
|
|
01.07.2008, 12:11 | #10 |
Участник
|
|
|
01.07.2008, 12:17 | #11 |
Участник
|
Цитата:
Особенно вот эти поля настораживают. - Qty - CostAmountPosted - CostAmountAdjustment |
|
01.07.2008, 12:33 | #12 |
Участник
|
Цитата:
|
|
01.07.2008, 13:46 | #13 |
Участник
|
|
|
01.07.2008, 13:47 | #14 |
Участник
|
А INCLUDE поля - это чо за зверь ?
Чем они в данной ситуации полезны ? |
|
01.07.2008, 14:03 | #15 |
Участник
|
|
|
02.07.2008, 08:46 | #16 |
----------------
|
|
|
02.07.2008, 11:52 | #17 |
Участник
|
|
|
Теги |
ax2.5 |
|
Похожие темы | ||||
Тема | Ответов | |||
Создание Lookup формы | 9 | |||
Крэш на ровном месте | 12 | |||
setFocus в момент инициализации формы | 3 | |||
Русская локализация Axapta 3 ? | 59 | |||
Динамические Lookup формы. | 0 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|