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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.03.2011, 16:46   #1  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Отмена сортировки по умолчанию на форме
Собственно - есть больша-а-а-я таблица - архив sysdatabaselog. Для нее делаю отдельную форму - практически копия стандартной sysdatabaselog.
Проблема в чем - система автоматом подставляет в запрос к БД сортировку по индексу.
Есс-но это очень долго, да и не нужно! Хочется избавиться от этого - пробую
X++:
public void executeQuery()
{
    this.query().dataSourceTable(tablenum(SysDatabaseLog_Arh)).sortClear();
    super();
}
Не помогает ! - на сервер все равно уходит -
PHP код:
ORDER BY SUBSTR(NLS_LOWER(A.DATAAREAID),1,3),A.TABLE_,A.LOGRECID,A.CREATEDDATE,A.CREATEDTIME 
Как избавиться от сортировки?
Старый 31.03.2011, 17:50   #2  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Поставьте у св-ва датасорса AutoQuery = No и сами подсуньте нужную кверю в init() датасорса
или
Ваш код перенесите из executeQuery() в init() поле Super();
или
если уж в executeQuery(), то используйте
this.queryRun().query()...
или
Пропишите в св-ве датасора другой сортировочный индекс, по которому сортироваться будет быстрее. Кстати, если есть индекс - почему медленно сортируется, не совсем понятно...

В общем как-то так...
Старый 31.03.2011, 21:04   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Если я правильно понимаю, то предполагается что пользователь сам установит нужный фильтр, т.е. показывать форму без фильтра не надо. Может быть поэтому при открытии этой формы сразу вызывать FormdataSource.QueryRun().prompt() или что-нить в этом духе, чтобы пользователь смог проставить нужный фильтр сильно, сужающий выборку.
Старый 31.03.2011, 21:21   #4  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Мне кажется, речь о медленном открытии формы, и как возможную причину рассматривают ненужную сортировку, накладывающуюся автоматически
Старый 31.03.2011, 22:44   #5  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Сортировка, уходящая на сервер при открытии формы - накладывается не просто так. А для ускорения открытия формы. А именно такая сортировка берется из-за того, что на таблице указан кластерный индекс TableRecIdIdx, который и содержит все эти поля. Кластерный индекс в свою очередь сортирует данные в файле согласно полям, входящим в него. Очевидно, что выбирая с сортировкой по кластерному индексу - выборка будет быстрее (если Вам сказать, что книги в библиотеке лежат согласно сортировке по названию книги = выдать запрос с сортировкой - то Вам легче будет отыскать нужную книгу).

В связи с этим - вопрос к автору топика. С чего Вы решили, что эта сортировка замедляет выборку?

Есть другое предположение, с чем связаны тормоза. Табличка не индексирована. Т.е. индекс как бы есть, но фактически его нет. Пересоздайте этот индекс или сделайте реиндексацию таблички. Должно все залетать
__________________
Возможно сделать все. Вопрос времени
Старый 31.03.2011, 23:32   #6  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
А какая версия AX, 9-ка? Странная сортировка по SUBSTR... Наверное, sukhanchik прав, а ещё обязательно попробуйте это, если AX2009а
За это сообщение автора поблагодарили: sukhanchik (2).
Старый 01.04.2011, 00:40   #7  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Судя по "...A.CREATEDDATE,A.CREATEDTIME..." версия ниже 5.0.

Согласен с DSPIC
Цитата:
Сообщение от egorych
... сортировку по индексу. Есс-но это очень долго
Не вижу тут ничего естественного. Сортировка по индексу должна работать быстро.

"OPTION(FAST 1)" у вас на сервер уходит?

Хм. В 4.0 наблюдаю странную вещь. Там на форме 2 источника данных. Оба по таблице SysDataBaseLog. Связи нет. Фильтр на запрос накладывается в методах источника данных.

В результате уходят два запроса.

"
SELECT A.USERNAME,A.DESCRIPTION,A.LOGTYPE,A.TABLE_,A.LOGRECID,A.CREATEDDATE,A.CREATEDTIME,A.CREATEDBY,A.CREATEDTRANSACTIONID,A.RECVERSION,A.RECID,A.DATA
FROM SYSDATABASELOG A WITH( NOLOCK)
WHERE ((DATAAREAID=?)
AND ((TABLE_=?)
AND (LOGRECID=?)))
ORDER BY A.DATAAREAID,A.TABLE_,A.LOGRECID,A.CREATEDDATE,A.CREATEDTIME OPTION(FAST 1)
"
Выборка по компании, таблице и коду записи. Запрос может венуть много записей по модификации конкретной записи в таблице, но, в общем случае скажем так, умеренно.

"
SELECT A.USERNAME,A.DESCRIPTION,A.LOGTYPE,A.TABLE_,A.LOGRECID,A.CREATEDDATE,A.CREATEDTIME,A.CREATEDBY,A.CREATEDTRANSACTIONID,A.RECVERSION,A.RECID,A.DATA
FROM SYSDATABASELOG A WITH( NOLOCK)
WHERE (DATAAREAID=?)
ORDER BY A.DATAAREAID,A.TABLE_,A.LOGRECID,A.CREATEDDATE,A.CREATEDTIME OPTION(FAST 1)
"
А вот этим запросом выбираются все данные из таблицы журнала в рамках конкретной компании. Если данных в таблице много (чего можно ожидать), то выборка будет отрабатывать долго и вполне может объяснять торможение формы.

Осталось понять как они этого добились.
__________________
С уважением,
glibs®
Старый 01.04.2011, 00:59   #8  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Попробуйте открывать форму для конкретной записи через паспорт записи.

Вообще с "OPTION(FAST 1)" открытие формы тормозить не должно сильно.

Смотрите план запроса. разумеется после реиндексации и обновления статистик. Что именно тормозит? И который из двух запросов?
__________________
С уважением,
glibs®
Старый 01.04.2011, 01:03   #9  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
В общем, не там проблему ищете, потому и не находите.
__________________
С уважением,
glibs®
Старый 01.04.2011, 05:07   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Может все проще?
Цитата:
Сообщение от egorych Посмотреть сообщение
Собственно - есть больша-а-а-я таблица - архив sysdatabaselog. Для нее делаю отдельную форму - практически копия стандартной sysdatabaselog.
...
Как избавиться от сортировки?
у вас свойство Index у датасорса установлено?
если да, то в соответствии со свойством и сортирует.
Просто уберите.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 378
Размер:	41.9 Кб
ID:	6716  
__________________
полезное на axForum, github, vk, coub.
Старый 01.04.2011, 08:42   #11  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Странная сортировка по SUBSTR...
Ничего странного - б/д Oracle
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: DSPIC (1).
Старый 01.04.2011, 09:47   #12  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Ой, сколько откликов за ночь! Отвечаю по порядку.
Аксапта 3 KR2 на Oracle 10g.
Да, речь идет об медленном открытии формы. Табличка партицированная (~250млн. записей), видимо поэтому order by очень сильно тормозит!
Для 1 записи (или нескольких - история) открывается мгновенно.
Пробовал вставлять sortclear и в init и в execute - результат однинаков т.е. никакого! Попробую еще с подменой query.
Св-во index на датасорсе не заполнено
Статистика и индекс перестроены, пересчитаны и залочены - табличка архивная, заполняется 1 раз в год.
Почему думаю, что тормозит order by? Я собственно не думаю, а знаю - пробовал в разных видах этот запрос делать во внешних тулзах - как только убираешь сортировку - все работает быстро!
Старый 01.04.2011, 09:58   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от egorych Посмотреть сообщение
Аксапта 3 KR2 на Oracle 10g.
Ух ты, какая древность.
А свойство primary index на самой таблице?

(cluster index пусть остается)

===============
добавлено: у меня только ax3.0 SP6. ни в исходном слое, ни в SP6 в свойствах не установлен Primary Index. А вот в SP2 - не помню.
Изображения
 
__________________
полезное на axForum, github, vk, coub.
Старый 01.04.2011, 10:16   #14  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Цитата:
Сообщение от mazzy Посмотреть сообщение
Ух ты, какая древность.
А свойство primary index на самой таблице?
(cluster index пусть остается)
И primary и cluster - все поля пустые!
В том и вопрос, что все известные мне способы отмены сортировки почему-то не работают!
__________________
Axapta 3.0 sp - хз какой, kr2
Старый 01.04.2011, 10:18   #15  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от mazzy Посмотреть сообщение
Ух ты, какая древность.
А свойство primary index на самой таблице?

(cluster index пусть остается)

===============
добавлено: у меня только ax3.0 SP6. ни в исходном слое, ни в SP6 в свойствах не установлен Primary Index. А вот в SP2 - не помню.
Индекс TableRecIdIdx - не является уникальным. Соотвественно, не может быть и первичным

Да и зачем нужен, в данном случае, Primary Key?


У меня другой вопрос.
Каким образом хранятся в кластерном индексе рассчитанные значения для функционального ключа? И как упорядочиваются записи по нему?
__________________
Axapta v.3.0 sp5 kr2
Старый 01.04.2011, 10:29   #16  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от egorych Посмотреть сообщение
И primary и cluster - все поля пустые!
В том и вопрос, что все известные мне способы отмены сортировки почему-то не работают!
Интересно.
У меня в конфиге из подписи кластерный индекс есть

А если таблицу просматривать в Обозревателе из Аксапты - тоже тормозит, или открывает быстро?
__________________
Axapta v.3.0 sp5 kr2
Старый 01.04.2011, 10:59   #17  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Цитата:
Сообщение от AndyD Посмотреть сообщение
Индекс TableRecIdIdx - не является уникальным. Соотвественно, не может быть и первичным
Да, это так, но т.к. индекс на таблице 1, то система добавила к нему RecID автоматом и получился уникальный индекс.
Цитата:
Сообщение от AndyD Посмотреть сообщение
У меня другой вопрос.
Каким образом хранятся в кластерном индексе рассчитанные значения для функционального ключа? И как упорядочиваются записи по нему?
Не совсем понял вопрос? Косяпта, как известно, в случае Оракла использует т.н. FBI и, соответственно в запросах также использует обертку для строковых полей из NLS_LOWER и SUBSTR, поэтому индексы используются нормально. Это то очем спрашивали?

Цитата:
Сообщение от AndyD Посмотреть сообщение
А если таблицу просматривать в Обозревателе из Аксапты - тоже тормозит, или открывает быстро?
Тоже тормозит - на сервере запрос получается все равно с order by !
__________________
Axapta 3.0 sp - хз какой, kr2
Старый 01.04.2011, 11:12   #18  
tricky is offline
tricky
Участник
 
140 / 64 (3) ++++
Регистрация: 03.05.2005
Адрес: Гуково
может быть это поможет
За это сообщение автора поблагодарили: egorych (5).
Старый 01.04.2011, 11:13   #19  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от AndyD Посмотреть сообщение
Да и зачем нужен, в данном случае, Primary Key?
Спрашиваю, потому что автор не сказал ни о версии, ни модификациях.
теперь мы можем быть уверены, что индексов в свойствах нет ни на форме, ни в таблице.

но ведь барабашки - нет!

значит, остаются какие-то непонятнки с ядром ax3.0 SP2.
Насколько я помню, SP2 глючный какой-то был. Мы старались обновлять клиентов до SP3, а потом хотя бы до Kernel Rollup 2. В KR2 много чего поправлено в ядре было.

egorych, у вас точно exe-шники от ax3.0 SP2?
или вы exe-шники таки обновляли?
что показывается в окне Помощь \ О программе?

можете скриншот привести?
щас мы вашу версию определим http://forum.mazzy.ru/index.php?showtopic=881

заодно, вы пробовали обновлять exe-шники до SP5? можете попробовать на тестовой базе и сообщить о результатах? может это багофича ядра какая-нибудь.
__________________
полезное на axForum, github, vk, coub.
Старый 01.04.2011, 11:35   #20  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от mazzy Посмотреть сообщение
значит, остаются какие-то непонятнки с ядром ax3.0 SP2.
Насколько я помню, SP2 глючный какой-то был. Мы старались обновлять клиентов до SP3, а потом хотя бы до Kernel Rollup 2. В KR2 много чего поправлено в ядре было.

egorych, у вас точно exe-шники от ax3.0 SP2?
или вы exe-шники таки обновляли?
что показывается в окне Помощь \ О программе?
У него в подписи
Axapta 3.0 sp - хз какой, kr2
Что-то сомневаюсь, что там sp2
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: mazzy (2).
Теги
order by, query, сортировка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Итератор с поддержкой методов обратного вызова для обработки контролов на форме gl00mie DAX: Программирование 18 06.08.2013 22:16
Отображение таблицы в новой форме форме DAsm DAX: Программирование 23 04.03.2011 21:50
Как правильно связать таблицы в форме? Как показать параметры партии? mazzy DAX: Программирование 10 27.10.2010 15:56
Несинхронность размерности полей в форме поиска... glibs DAX: Функционал 0 05.04.2010 21:54
Использование семейства InventDimCtrl_Frm_* - 2 DS InventDim на одной форме Pavlo AKA Panok DAX: База знаний и проекты 5 22.12.2008 17:15

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

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

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