AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Администрирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.08.2009, 11:40   #1  
ena_ax is offline
ena_ax
Участник
 
254 / 46 (2) +++
Регистрация: 06.12.2006
Сильные тормоза при разноске Заказа на продажу
Коллеги,

проблема с обработкой Заказов на продажу. Проявляется разными способами:
1. При нажатии кнопки Запросы/Итоги система зависает. Форма Итоги открывается после очень длительного времени (несколько минут).
2. При обработке документов: Отгрузочная накладная, Накладная - система зависает надолго (дождаться завершения выполнения невозможно).

После переиндексации производительность восстанавливается.

Исходные данные:
Axapta 4.0, SQL 2005.
Каждую ночь на SQL запускается джоб по реиндексации базы.
Раз в неделю делается Shrink.

В чем может быть проблема?
Какими средствами можно найти "слабое место"?
Старый 24.08.2009, 11:47   #2  
AX2009
Гость
 
n/a
Помню раньше была в аксапте такая проблема - все строки разносятся в одной транзакции и MSSQL после обработки нескольких строк принимал решение "блокировать всю таблицу"
Проблема решалась добавлением одной строчки в коде:
X++:
sort by itemId
в методе, который вибирал строки для разноски
Старый 24.08.2009, 13:09   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от ena_ax Посмотреть сообщение
Какими средствами можно найти "слабое место"?
Аксаптовскими http://axapta.mazzy.ru/lib/querytuning/
а также новой утилитой TraceParser, которая пришла на смену аксаптовским средствам (ищите на форуме)
__________________
полезное на axForum, github, vk, coub.
Старый 24.08.2009, 13:16   #4  
ena_ax is offline
ena_ax
Участник
 
254 / 46 (2) +++
Регистрация: 06.12.2006
спасибо.
Старый 25.08.2009, 00:49   #5  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от ena_ax Посмотреть сообщение
Раз в неделю делается Shrink
Перестаньте мучать животное
Stop Shrinking Your Database Files. Seriously. Now.
__________________
-ТСЯ или -ТЬСЯ ?
Старый 25.08.2009, 09:56   #6  
ena_ax is offline
ena_ax
Участник
 
254 / 46 (2) +++
Регистрация: 06.12.2006
Цитата:
Сообщение от mazzy Посмотреть сообщение
Аксаптовскими http://axapta.mazzy.ru/lib/querytuning/
а также новой утилитой TraceParser, которая пришла на смену аксаптовским средствам (ищите на форуме)
Следую указаниям включил Трасировку запросов SQL, выставил значение Апертура равное 100, Установил checkbox Таблица (база данных)

За сутки Журнал трасирвоки запросов SQL пустой.
Что-то недонастроил или зпросы все быстро выполняются?
Старый 25.08.2009, 10:10   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от ena_ax Посмотреть сообщение
За сутки Журнал трасирвоки запросов SQL пустой.
Что-то недонастроил или зпросы все быстро выполняются?
Во-первых, настраивать апертуру надо у каждого пользователя, которого хочется отслеживать.
Во-вторых, в ax4 и выше в конфигурационной утилите надо включать галочки на закладке Tracing (по крайней мере эти)
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 174
Размер:	53.5 Кб
ID:	5031
Об этом Еременко где-то в своих блогах писал.
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: ena_ax (1).
Старый 25.08.2009, 10:38   #8  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Хм... а я пользовался трассировкой и без этих галок. Единственное что требовалось - это в конфигурации аоса поставить галки:Нажмите на изображение для увеличения
Название: ax4.png
Просмотров: 258
Размер:	32.5 Кб
ID:	5032, по крайней мере нижнюю.

А дальше - выставляешь апертуру, вывод в инфолог и уже все сразу сыпется

Не, понятно - что без флажка Bind variables к примеру - значения переменных не увидишь, но отловить долгий запрос и понять где он в коде генерируется - вполне можно
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 25.08.2009 в 10:40.
Старый 31.08.2009, 11:45   #9  
ena_ax is offline
ena_ax
Участник
 
254 / 46 (2) +++
Регистрация: 06.12.2006
При помощи Tracer выявил запрос, который долго обрабатывается (время выполнения - 222598). Помогите разобраться в причине столь медленного выполненния. После реиндексации запрос обрабатывается без замедлений.

SELECT SUM(A.POSTEDQTY),SUM(A.POSTEDVALUE),SUM(A.PHYSICALVALUE),SUM(A.DEDUCTED),SUM(A.RECEIVED),SUM(A.RESERVPHYSICAL),SUM(A.RESERVORDERED),SUM(A.REGISTERED),SUM(A.PICKED),SUM(A.ONORDER),SUM(A.ORDERED),SUM(A.ARRIVED),SUM(A.QUOTATIONRECEIPT),SUM(A.QUOTATIONISSUE),SUM(A.AVAILPHYSICAL),SUM(A.AVAILORDERED),SUM(A.POSTEDVALUESECCUR_RU),SUM(A.PHYSICALVALUESECCUR_RU),SUM(A.PHYSICALINVENT) FROM INVENTSUM A WHERE ((A.DATAAREAID=?) AND ((A.ITEMID=?) AND (A.CLOSED=?))) AND EXISTS (SELECT 'x' FROM INVENTDIM B WHERE ((B.DATAAREAID=?) AND ((B.INVENTDIMID=A.INVENTDIMID) AND (B.INVENTLOCATIONID=?))))


Место в коде таблица InventSum\findSum

X++:
*********
 
default:
                select #inventSumFields from inventSum
                    where inventSum.ItemId      == _itemId   &&
                          inventSum.Closed      == NoYes::No
                #inventDimExistsJoin(inventSum.InventDimId,inventDim,_InventDimCriteria,_InventDimParm);
Старый 31.08.2009, 12:06   #10  
AX2009
Гость
 
n/a
У вас в заказах строк сколько?
есть ли одинаковые номенклатуры?

Последний раз редактировалось AX2009; 31.08.2009 в 12:08.
Старый 31.08.2009, 12:13   #11  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Есть еще в Tracer такая кнопочка - План исполнения, а затем Рассчитать новый план - там показывается по какому индексу идет выборка.

Для начала попробуйте в индексе \Data Dictionary\Tables\InventSum\Indexes\ClosedItemDimIdx поставить первым полем ItemId, а вторым Closed.

А также скажите - какие индексы у Вас на таблице InventSum (интересует список полей по индексам с учетом положения поля в индексе). Плюс скажите по какому индексу ведется выборка по InventSum.

Общие правила такие:
1. Поля, в которых содержится большее количество разнородной информации должны быть раньше в индексе. Очевидно, что в ItemId содержится больше разнородной информации, чем в Closed
2. Наибольшее количество полей с наибольшим количеством разнородной информации, участвующие в предложениях Where, Join, Group by, Order by запроса должны присутствовать в индексе. При этом БД должна правильно выбрать индекс (не запутаться в многообразии). Неправильно выбранный индекс приведет к более долгому исполнению запроса. Например, наличие енума в индексе на производительность может не повлиять (мало разнородной информации), но может повлиять на выбор индекса.
3. Увеличение количества индексов на таблице увеличивает время на вставку записей.
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 31.08.2009 в 12:33.
Старый 31.08.2009, 13:19   #12  
ena_ax is offline
ena_ax
Участник
 
254 / 46 (2) +++
Регистрация: 06.12.2006
Цитата:
Сообщение от AX2009 Посмотреть сообщение
У вас в заказах строк сколько?
есть ли одинаковые номенклатуры?
Количество строк в Заказе порядка 10, одинаковых номенклатур нет.

Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Есть еще в Tracer такая кнопочка - План исполнения, а затем Рассчитать новый план - там показывается по какому индексу идет выборка.

Для начала попробуйте в индексе \Data Dictionary\Tables\InventSum\Indexes\ClosedItemDimIdx поставить первым полем ItemId, а вторым Closed.

А также скажите - какие индексы у Вас на таблице InventSum (интересует список полей по индексам с учетом положения поля в индексе). Плюс скажите по какому индексу ведется выборка по InventSum.

Общие правила такие:
1. Поля, в которых содержится большее количество разнородной информации должны быть раньше в индексе. Очевидно, что в ItemId содержится больше разнородной информации, чем в Closed
2. Наибольшее количество полей с наибольшим количеством разнородной информации, участвующие в предложениях Where, Join, Group by, Order by запроса должны присутствовать в индексе. При этом БД должна правильно выбрать индекс (не запутаться в многообразии). Неправильно выбранный индекс приведет к более долгому исполнению запроса. Например, наличие енума в индексе на производительность может не повлиять (мало разнородной информации), но может повлиять на выбор индекса.
3. Увеличение количества индексов на таблице увеличивает время на вставку записей.
Таблица InventSum без модификаций. Привожу индексы:
1. ClosedItemDimIdx - по рекомендации выставил порядок полей ItemId, Closed
2. ItemDimIdx - ItemId, InventDimId
3. DimIdIdx - InventDimId, Closed

План запроса показал использование индексов ItemDimIdx, DimIdIdx.

Последний раз редактировалось ena_ax; 31.08.2009 в 13:27.
Старый 31.08.2009, 13:29   #13  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Помогла моя рекомендация? Если нет - вертайте все взад

Вот индекс DimIdIdx при этой выборке не сдался совершенно. В нем нет ItemId, по которому идет выборка. Индекс ItemDimIdx в общем-то нормальный... Количество записей в InventTable больше количества записей в InventDim ? (иначе в этом индексе можно попробовать переставить поля)
__________________
Возможно сделать все. Вопрос времени
Старый 31.08.2009, 13:51   #14  
ena_ax is offline
ena_ax
Участник
 
254 / 46 (2) +++
Регистрация: 06.12.2006
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Помогла моя рекомендация? Если нет - вертайте все взад

Вот индекс DimIdIdx при этой выборке не сдался совершенно. В нем нет ItemId, по которому идет выборка. Индекс ItemDimIdx в общем-то нормальный... Количество записей в InventTable больше количества записей в InventDim ? (иначе в этом индексе можно попробовать переставить поля)
После перестановки полей в индексе ClosedItemDimIdx лучше не стало. Вернул в исходное состояние.
К сожалению экспериментировать могу только на боевой базе, так как поймать момент падения производительности - не получается, а после поднятия бэкапа ошибка пропадает.
Старый 31.08.2009, 14:41   #15  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от ena_ax Посмотреть сообщение
После перестановки полей в индексе ClosedItemDimIdx лучше не стало. Вернул в исходное состояние.
Не, ну понятно - если выборка идет по одному индексу, то игра с другим индексом погоды не сделает, если только не будет выбран другой индекс.

Игра с производительностью часто происходит на рабочей БД, т.к. не всегда на тестовой все воспроизводится.

Не забывайте, что если Вы хоть как-то тронете индекс ItemDimIdx, по которому у Вас идет выборка - то это будет эквивалентно переиндексации InventSum по данному индексу, т.е. после этого у Вас опять все будет летать.
__________________
Возможно сделать все. Вопрос времени
Старый 31.08.2009, 14:54   #16  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
А можно подетальнее сообщить по плану запроса? Интересуют параметры, нарисованные в зеленых овалах. А в нижней строке - интересует где больше просаживается производительность - на объединении таблиц или на поиске.

Нажмите на изображение для увеличения
Название: Plan.PNG
Просмотров: 172
Размер:	37.0 Кб
ID:	5058
__________________
Возможно сделать все. Вопрос времени
Старый 31.08.2009, 15:26   #17  
ena_ax is offline
ena_ax
Участник
 
254 / 46 (2) +++
Регистрация: 06.12.2006
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
А можно подетальнее сообщить по плану запроса? Интересуют параметры, нарисованные в зеленых овалах. А в нижней строке - интересует где больше просаживается производительность - на объединении таблиц или на поиске.
Странно, по плану небольшие затраты и ожижаемое кол-во строк.
Миниатюры
Нажмите на изображение для увеличения
Название: QueryPlan1.JPG
Просмотров: 314
Размер:	74.5 Кб
ID:	5059   Нажмите на изображение для увеличения
Название: QueryPlan2.JPG
Просмотров: 332
Размер:	76.7 Кб
ID:	5060  

Нажмите на изображение для увеличения
Название: QueryPlan3.JPG
Просмотров: 200
Размер:	78.7 Кб
ID:	5061  
Старый 31.08.2009, 15:41   #18  
Волчара is offline
Волчара
Участник
 
210 / 29 (1) +++
Регистрация: 08.02.2003
Адрес: Москва
Post
Цитата:
Сообщение от ena_ax Посмотреть сообщение
При помощи Tracer выявил запрос, который долго обрабатывается (время выполнения - 222598). Помогите разобраться в причине столь медленного выполненния. После реиндексации запрос обрабатывается без замедлений.

Место в коде таблица InventSum\findSum
X++:
default:
                select #inventSumFields from inventSum
                    where inventSum.ItemId      == _itemId   &&
                          inventSum.Closed      == NoYes::No               #inventDimExistsJoin(inventSum.InventDimId,inventDim,_InventDimCriteria,_InventDimParm);
1. Проблема всегда возникает только в этом запросе?
2. Сколько записей в InventDim сколько записей в InventSum ?
3. Можно попробовать заменить #inventDimExistsJoin на #inventDimInnerJoin
а) кажется такой есть
b) думаю что нарушений алгоритма не будет - но если не уверены - выложите плиз сюда полный текст X++ метода, какая версия системы, какая структура вызова - из какого метода был вызван InventSum\findSum
__________________
Благодарю за поддержку ИЦ Кариатиду и Koder Logic

Последний раз редактировалось Волчара; 31.08.2009 в 15:43. Причина: уточнение
Старый 31.08.2009, 15:56   #19  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от ena_ax Посмотреть сообщение
Странно, по плану небольшие затраты и ожижаемое кол-во строк.
А на суммировании? (Stream Aggregate)

Может просто сейчас не тормозит запрос?

Возможны по идее еще варианты - если кто-то другой лочит InventSum - и Вы подвисаете. Например - один (пакетник к примеру) запустил сводное планирование (пересчет склада), остальные наслаждаются скоростью работы.
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 31.08.2009 в 15:59.
Старый 31.08.2009, 16:14   #20  
ena_ax is offline
ena_ax
Участник
 
254 / 46 (2) +++
Регистрация: 06.12.2006
Цитата:
Сообщение от Волчара Посмотреть сообщение
1. Проблема всегда возникает только в этом запросе?
2. Сколько записей в InventDim сколько записей в InventSum ?
3. Можно попробовать заменить #inventDimExistsJoin на #inventDimInnerJoin
а) кажется такой есть
b) думаю что нарушений алгоритма не будет - но если не уверены - выложите плиз сюда полный текст X++ метода, какая версия системы, какая структура вызова - из какого метода был вызван InventSum\findSum
1. Я наблюдал проблему только в этом запросе. Проявляется как при разноске Накладной на продажу, так и при формировании запроса Итогов по Заказу на Продажу (Запросы/Итоги)
2. В InventDim - 192685 записей
в InventSum - 174377 записей

3. Версия kernel 4.0.2501.116
Appl - 4.0.2501.347
Теги
ax4.0, sql 2005, заказ на продажу, производительность, тормоза

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX 4.0 Заказ на продажу на основании заказа на покупку Бигудь DAX: Функционал 13 20.11.2024 17:12
Цены в строке заказа меняются при изменении шапки заказа s.alex DAX: Функционал 8 14.04.2009 11:27
Производственный заказ из заказа на продажу (не создается) Sadj DAX: Функционал 3 23.01.2009 09:39
Формирование цены товара с учетом скидок и дисконтов на примере заказа на продажу rusalaudinov DAX: Программирование 3 21.03.2008 13:39
Удаление заказа на продажу Ace of Database DAX: Функционал 3 29.07.2005 10:41

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:15.