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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.09.2012, 17:17   #1  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
? Уменьшение кол-ва полей в запросе
Для уменьшения количества полей в курсоре пишу, например так -
X++:
    this.itemGroupId      = (select ItemId, itemGroupId, RecId from InventTable
                                where InventTable.ItemId == inventTrans.itemId).itemGroupId;
Но трассировка на сервере говорит, что на сервер уходит запрос с полным перечнем полей, типа так -
X++:
SELECT /*+ INDEX(A I_175ITEMIDX) FIRST_ROWS */A.ITEMGROUPID,A.ITEMID,A.ITEMNAME,A.ITEMTYPE,A.PURCHMODEL,A.HEIGHT,A.WIDTH,A.SALESMODEL,A.COSTGROUPID,A.PRIMARYVENDORID,A.NETWEIGHT,A.DEPTH,A.UNITVOLUME,A.BOMUNITID,A.DENSITY,A.DEL_SCRAPTYPEID,A.DIMENSION,A.DIMENSION2_,A.DIMENSION3_,A.DIMENSION4_,A.COSTMODEL,A.USEALTITEMID,A.ALTITEMID,A.INTRACODE,A.DEL_COVPERINVENTLOCATION,A.PHANTOM,A.INTRAUNIT,A.BOMLEVEL,A.BATCHNUMGROUPID,A.AUTOREPORTFINISHED,A.ORIGCOUNTRYID,A.STATISTICSFACTOR,A.ALTCONFIGID,A.STANDARDCONFIGID,A.DEL_CONFIGACTIVE,A.ABCTIEUP,A.ABCREVENUE,A.ABCVALUE,A.ABCCONTRIBUTIONMARGIN,A.COMMISSIONGROUPID,A.DEL_BARCODE,A.DEL_BARCODETYPE,A.CONFIGURABLE,A.SALESPERCENTMARKUP,A.SALESCONTRIBUTIONRATIO,A.SALESPRICEMODELBASIC,A.MINAVERAGESETTLE,A.NAMEALIAS,A.GROSSDEPTH,A.GROSSWIDTH,A.GROSSHEIGHT,A.STANDARDPALLETQUANTITY,A.QTYPERLAYER,A.SORTCODE,A.CONFIGSIMILAR,A.SERIALNUMGROUPID,A.DIMGROUPID,A.MODELGROUPID,A.ITEMBUYERGROUPID,A.TAXPACKAGINGQTY,A.DEL_TEMPLATE,A.WMSPALLETTYPEID,A.ORIGSTATEID,A.STOPEXPLODEPRICE,A.WMSPICKINGQTYTIME,A.TARAWEIGHT,A.PACKAGINGGROUPID,A.SCRAPVAR,A.SCRAPCONST,A.STANDARDINVENTCOLORID,A.STANDARDINVENTSIZEID,A.ITEMDIMCOMBINATIONAUTOCREATE,A.ITEMDIMCOSTPRICE,A.ALTINVENTSIZEID,A.ALTINVENTCOLORID,A.GROSSWEIGHT_RU,A.PACKING_RU,A.ASSETGROUPID_RU,A.ASSETID_RU,A.K_ITEMVIEWID,A.K_ITEMMATERIALTYPEID,A.K_ITEMPRODUCERID,A.K_ITEMCOLLECTIONID,A.K_ITEMCOLORID,A.K_ITEMSIZEID,A.K_ITEMTNVDID,A.K_ITEMREPLACEID,A.K_ITEMDEPARTMENTID,A.EL_1C_COMPATIBLE,A.EN_NAMEALIAS,A.STANDARDINVENTBATCHID,A.ITEMTHICKNESSID,A.SUPPLY_EL,A.SUPPLY_EL2_,A.SUPPLY_EL3_,A.DELIVERY_EL,A.INVENT_NEGATIVESTOCK_EL,A.EL_UZENEN,A.QTYLAYER,A.MODIFIEDDATE,A.MODIFIEDBY,A.CREATEDDATE,A.CREATEDBY,A.RECVERSION,A.RECID FROM INVENTTABLE A WHERE ((SUBSTR(NLS_LOWER(DATAAREAID),1,3)=NLS_LOWER(:in1)) AND (SUBSTR(NLS_LOWER(ITEMID),1,20)=NLS_LOWER(:in2)))
Я помню, было обсуждение - как добиться нужного результата (уменьшение числа полей), но не могу его найти - может кто помнит?
__________________
Axapta 3.0 sp - хз какой, kr2
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 06.09.2012, 02:56   #2  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от egorych Посмотреть сообщение
как добиться нужного результата (уменьшение числа полей)
А зачем такого результата добиваться? Выбирается единичная запись по значению первичного ключа в таблице с CacheLookup != None. Такой (и последующие) запросы в основном из кэша AOS-а должны разрешаться без какого-либо трафика вообще между серверами приложений и БД. Хорошо, нет записи в кэше - так надо ее наверное туда поместить, а как это сделать если только часть полей из БД выбиралась?
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: macklakov (1).
Старый 06.09.2012, 11:07   #3  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Не факт, что значение есть в кэше - табличка довольно большая.
__________________
Axapta 3.0 sp - хз какой, kr2
Старый 06.09.2012, 21:04   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от egorych Посмотреть сообщение
Не факт, что значение есть в кэше - табличка довольно большая.
Вы забываете, что кеш он "общий" и используется многкратно. Уже после того, как его первый раз наполнили.

Предположим, Вы добились чего хотели. Получаем такой сценарий

1. Записи в кеше нет
2. Сделали выборку одной записи, но всего двух полей
3. В кеш записалось только два поля
4. Ваш запрос отработал успешно
5. Теперь Вы делаете выборку других полей
6. Запись уже есть в кеше и Вы берете данные из кеша. Но в кеше есть данные только о тех двух полях, которые Вы выбирали в первом запросе. Получаете проблемы на ровном месте

Т.е. Вам надо либо отменять кеширование, либо выбирать все поля. Что для Вас предпочтительнее решайте сами
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 07.09.2012, 11:10   #5  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Блиин! До чего мне нравятся наши люди! На четко поставленный вопрос дадут жменьку рекомендаций, ЦУ и других полезных вещей! НО НИ СЛОВА ПО ДЕЛУ!
Ну я ж не спрашивал использовать мне кэш или нет! Я хочу, чтобы система не думала, что она умней и делала ровно то, что ей говорят!
Я просил ее выдать все поля? Нет! Так какого-же...
__________________
Axapta 3.0 sp - хз какой, kr2
Старый 07.09.2012, 11:18   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от egorych Посмотреть сообщение
Я хочу, чтобы система не думала...
Отключите кэширование и делов то И не будет система сама принимать решение откуда и когда ей брать значения. Будет написан select - будет сделан запрос в БД

P.S.: На ум пришла одна ситуация для которой данное поведение может быть критично. Это превышение настроенного Maximum buffer size для передачи с клиента на сервер.

Последний раз редактировалось S.Kuskov; 07.09.2012 в 11:26.
За это сообщение автора поблагодарили: mazzy (2).
Старый 07.09.2012, 13:37   #7  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
P.S.: На ум пришла одна ситуация для которой данное поведение может быть критично. Это превышение настроенного Maximum buffer size для передачи с клиента на сервер.
5 баллов за догадку! Только оно возникает почему-то далеко не всегда и на массовых операциях - типа закрытия склада. Система просто рушится с ошибкой. Причем, Maximum buffer size - это не для клиент-АОС, а для АОС-БД - т.к. в режиме 3-х звенки параметр Buffer size не используется и не доступен для редактирования.
__________________
Axapta 3.0 sp - хз какой, kr2

Последний раз редактировалось egorych; 07.09.2012 в 13:45.
Старый 07.09.2012, 15:34   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от egorych Посмотреть сообщение
Блиин! До чего мне нравятся наши люди! На четко поставленный вопрос дадут жменьку рекомендаций, ЦУ и других полезных вещей! НО НИ СЛОВА ПО ДЕЛУ!
Ну я ж не спрашивал использовать мне кэш или нет! Я хочу, чтобы система не думала, что она умней и делала ровно то, что ей говорят!
Я просил ее выдать все поля? Нет! Так какого-же...
Блиин! До чего мне нравятся наши люди! Прочитают только одну фразу ответа и тут же пишут гневные возражения на эту самую фразу. Даже не пытаясь понять о чем вообще речь

Как, ну КАК система должна решить использовать ей кеш или нет? Каким образом она вот здесь должна "думать", а вот здесь - "не думать"? Вы указали ей "не использовать кеш"? Нет! Так какого-же...

А если кеш используется, то автоматически выбираются ВСЕ поля, вне зависимости от того, что Вы там указали.

PS: Каким образом ОДИН запрос поможет решить проблему превышения Maximum buffer size - не понимаю. Ну, вот этот конкретный запрос исправили. И? Ждем следующего падения где-то в другом месте? Так это ВСЮ систему надо перелопачивать на предмет "обрезки" запросов. "Что-то в консерватории надо подправить" (с)

PPS: Кстати, тоже показательно (не знаю, насколько именно для "наших" людей), когда описывают не саму проблему, а выбранный способ ее решения.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 07.09.2012, 15:51   #9  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Как, ну КАК система должна решить использовать ей кеш или нет? Каким образом она вот здесь должна "думать", а вот здесь - "не думать"? Вы указали ей "не использовать кеш"? Нет! Так какого-же...
Согласно МОИМ понятиям - я как раз и указал, что не использовать! Ибо я ПРЯМО указал -"мне нужно ТОЛЬКО 3 поля". Я в курсе, что дамгарды (вместе с мелкософтами) курят другую траву, и их логика с моей не коррелирует, но как еще должно трактоваться ПРЯМОЕ УКАЗАНИЕ - "взять 3 поля" - я не знаю!
Если бы я сначала объявил переменную типа InventTable, потом сформировал кверю или селект, то еще как-то с натяжкой можно смириться с тем, что система правит запрос.
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
PS: Каким образом ОДИН запрос поможет решить проблему превышения Maximum buffer size - не понимаю.
поправка - ОДИН ШИРОКИЙ запрос - запросто может!
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Ну, вот этот конкретный запрос исправили. И? Ждем следующего падения где-то в другом месте? Так это ВСЮ систему надо перелопачивать на предмет "обрезки" запросов. "Что-то в консерватории надо подправить" (с)
Абсолютно согласен - консерваторию и правлю! Или Вы считаете, что те, кто писал изначальный код безгрешны и непогрешимы? Извините, то что я вижу на экране, меня в этом не убеждает.

Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
PPS: Кстати, тоже показательно (не знаю, насколько именно для "наших" людей), когда описывают не саму проблему, а выбранный способ ее решения.
Когда не знают причины - описывают проблему. ИМХО в моем случае - причина очевидна, поэтому я и задал вполне конкретный вопрос.
__________________
Axapta 3.0 sp - хз какой, kr2

Последний раз редактировалось egorych; 07.09.2012 в 15:55.
Старый 07.09.2012, 12:07   #10  
Stitch_MS is offline
Stitch_MS
Участник
Аватар для Stitch_MS
Соотечественники
 
397 / 478 (16) +++++++
Регистрация: 27.02.2006
Адрес: Дания
Есть пост на эту тему. Там говорится, что вместо == можно написать like.
За это сообщение автора поблагодарили: Raven Melancholic (1), S.Kuskov (1).
Старый 07.09.2012, 13:30   #11  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
like проблему выборки полей, конечно, решит. Только вот результат может быть не тот, что хотели получить.
Путь нужна номенклатура 125321, задаем like "125321*", а у нас есть 1253211. Получим непонятно что.
Старый 07.09.2012, 14:12   #12  
Stitch_MS is offline
Stitch_MS
Участник
Аватар для Stitch_MS
Соотечественники
 
397 / 478 (16) +++++++
Регистрация: 27.02.2006
Адрес: Дания
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
задаем like "125321*"
зачем?
like вполне себе работает и без звездочек, по конкретному значению
Теги
buffer size, maximum buffer size

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Журнал переноса. Уменьшение кол-ва. Баг? ZVV DAX: Функционал 20 31.08.2009 15:00
выбор полей в запросе (не все поля видны) mdconsult DAX: Программирование 12 02.02.2009 09:21
оптимальное кол-во полей в таблице SHiSHok DAX: Программирование 9 30.04.2008 18:31
Сравнение полей в запросе DreamCreator DAX: Программирование 12 09.02.2006 11:17
Превышение кол-ва в "немедленная поставка" кол-ва "к поставке" Pegiy DAX: Функционал 16 23.03.2004 20:03

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

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

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