11.01.2016, 20:08 | #1 |
Участник
|
Проблема с запросом
добрый день!
Вот такой запрос исполняется очень медленно. Не могу понять причину. AX 2009 SP7. X++: static void _HTC_GetStockForItem(Args _args) { Dialog dialog = new dialog(); DialogField dlgItemId; DialogField dlgTransDate; ItemId itemId; TransDate transDate; InventSumDateValueReport onhand; Qty qty; InventSettlement inventSettlement; InventTrans inventTrans; InventTransPosting inventTransPostingPhysical; ; dlgItemId = dialog.addFieldValue(typeid(ItemId),itemId); dlgTransDate = dialog.addFieldValue(typeid(TransDate),transDate); dialog.run(); transDate = dlgTransDate.value(); itemId = dlgItemId.value(); //onhand = InventSumDateValueReport::newParameters(transDate,itemId); //qty = onhand.physicalQuantity(); //info(strfmt("%1| %2", itemId, qty)); while select forceplaceholders sum(CostAmountAdjustment) from inventSettlement index hint ItemDateIdx where inventSettlement.ItemId == itemId && inventSettlement.Cancelled == NoYes::No && inventSettlement.TransDate > transDate && /* <SYS> inventSettlement.SettleModel == InventSettleModel::PhysicalValue </SYS> */ // <GEEU> inventSettlement.SettleModel == InventSettleModel::PhysicalValue && inventSettlement.InventTransCurrency_RU == InventTransCurrency_RU::PrimaryCur // </GEEU> join TableId from inventTrans index hint RecId where inventTrans.RecId == inventSettlement.TransRecId && (inventTrans.StatusIssue == StatusIssue::Sold || inventTrans.StatusReceipt == StatusReceipt::Purchased) && inventTrans.DatePhysical <= transDate join IsPosted from inventTransPostingPhysical index hint DateVoucherTransIdx group by IsPosted where inventTrans.VoucherPhysical == inventTransPostingPhysical.Voucher && inventTrans.DatePhysical == inventTransPostingPhysical.TransDate && inventTrans.InventTransId == inventTransPostingPhysical.InventTransId && inventTransPostingPhysical.InventTransPostingType == InventTransPostingType::Physical && inventTransPostingPhysical.IsPosted == inventSettlement.Posted { qty = -inventSettlement.CostAmountAdjustment; } info(strfmt("%1| %2", itemId, qty)); } Проблема такая - у меня на ноутбуке исполняется мнгновенно. На сервере с 32 гигами оперативки исполяется запрос 5 секунд. Подскажите как посмотреть в чем дело? |
|
12.01.2016, 07:24 | #2 |
Участник
|
Исключить влияние кеша при проведении эксперимента.
Смотреть план выполнения запроса. |
|
12.01.2016, 08:44 | #3 |
Злыдни
|
А какие размеры базы на ноутбуке и на сервере? Наверняка количество записей в транзакционных таблицах отличаются на 3-4 порядка. Рекомендую обновить статистику на сервере и выполнить запрос повторно. Если не помогает, убрать хинты из запроса, попробовать выполнить запрос. Если опять время длительное, получить текст запроса и скормить оптимизатору SQL на сервере. Посмотреть, на какой части запроса наибольшие потери и какой индекс предлагается добавить для ускорения запроса.
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
12.01.2016, 11:34 | #4 |
Участник
|
Про сравнение планов запроса уже написали. У меня к самому запросу некоторые замечания.
Непонятно зачем нужна выборка IsPosted и группировка по нему. В InventTransPosting и так уникальность есть по сочетанию Ваучер/Дата/Лот/Тип разноски. Соединение с InventTransd + фильтр все их использует. В классе InventSumDateValueReportDim это поле хотя бы используется (но и там вполне можно было обойтись без его выборки). Я думаю, что вполне можно убрать группировку и вместо выборки поля выбирать TableId. Кстати, заметьте, что в этом стандартном классе разные запросы для разных настроек складских аналитик. |
|
12.01.2016, 12:52 | #5 |
Участник
|
Разницы нет абсолютно - бд то скачанная - размер и струтура таже. Посмотрел в execution plan - cost is on sort (33%) and primary key cluster insert (29 %)
На ноутбуке выполняется так быстро что даже нечего смотреть. Щас попробую сделать rebuild indexes |
|
12.01.2016, 14:29 | #6 |
Участник
|
Вобщем как итог ребилд сделал - все быстро работет. Большое спасибо всем. Просто громадное.
|
|
|
Похожие темы | ||||
Тема | Ответов | |||
Проблема с запросом | 7 | |||
Проблема с запросом | 7 | |||
Проблема с SQL запросом | 15 | |||
Проблема с запросом | 2 | |||
Проблема с запросом | 7 |
|