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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.09.2006, 17:26   #1  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Axapta + Oracle + FIRST_ROWS = проблемы
Есть Акспта 3.0SP3 + Oracle9i Enterprise Edition Release 9.2.0.7.0 - Production
Для тестирования взял 2 запросика из 1 формы, с фильтром и без
Код:
static void Job127(Args _args)
{
    UserConnection  con = new UserConnection();
    Statement       stat = con.createStatement();
    CustInvoice4PaymJour_RU         paymJour;
    CustInvoice4PaymSalesLink_RU    salesLink;
    ;

    //stat.executeUpdate("ALTER SESSION SET query_rewrite_enabled=true");
    //stat.executeUpdate("ALTER SESSION SET query_rewrite_enabled=false");
    //stat.executeUpdate("ALTER SESSION SET NLS_SORT='RUSSIAN'");
    stat.executeUpdate("ALTER SESSION SET NLS_SORT='BINARY'");
    //stat.executeUpdate("ALTER SESSION SET NLS_COMP=ANSI");
    stat.executeUpdate("ALTER SESSION SET NLS_COMP='BINARY'");

    paymJour.setConnection(con);
    salesLink.setConnection(con);

    select firstfast paymJour
        order by Invoice4PaymId, Invoice4PaymDate
    join salesLink
        where salesLink.Invoice4PaymId   == paymJour.Invoice4PaymId
           && salesLink.Invoice4PaymDate == paymJour.Invoice4PaymDate
           && salesLink.SalesId          == paymJour.SalesId
           && salesLink.OrigSalesId      == "0099556";

    select firstfast paymJour
        order by Invoice4PaymId, Invoice4PaymDate
    join salesLink
        where salesLink.Invoice4PaymId   == paymJour.Invoice4PaymId
           && salesLink.Invoice4PaymDate == paymJour.Invoice4PaymDate
           && salesLink.SalesId          == paymJour.SalesId;
}
Время исполнения:
первого 6,5 сек (получаем всего 1 запись)
второго 0,1 сек (получаем первую запись)

После изменения настроек
Код:
    stat.executeUpdate("ALTER SESSION SET NLS_SORT='RUSSIAN'");
    //stat.executeUpdate("ALTER SESSION SET NLS_SORT='BINARY'");
Имеем обратную картину со временем исполнения
первого 0,1 сек (получаем всего 1 запись)
второго 5,5 сек (получаем первую запись)

Очень хочется, чтобы оба запроса быстро выполнялись
Есть какие-нибудь мысли, куда смотреть?
(нанять опытного DBA не предлагать плиз)

P.S. NLS_SORT='BINARY' - прописано в ktd-файле, так что при большом желании можно поменять раз и навсегда
Старый 29.09.2006, 18:00   #2  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
PHP код:
join salesLink index hint Invoice4PaymIdx 
?
клиент кстати какой версии?
__________________
-ТСЯ или -ТЬСЯ ?
Старый 29.09.2006, 18:19   #3  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Фишка в том, что у нас еще исторически сложилось -hint=2, так что index hint не пройдет.
Это запросы аналог запросов из формы, а там так просто с index hint не получится. Кроме того, такая фигня практически во всех формах, => ищу универсальное решение

Клиент оракловый? если бы я знал как посмотреть, то сказал бы.
Мне кажется, роли не играет, так как запросы, планы, и тормоза наблюдаются на серваке. Если надо, могу все выложить детализацию.
Старый 29.09.2006, 18:25   #4  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Wamr Посмотреть сообщение
Фишка в том, что у нас еще исторически сложилось -hint=2, так что index hint не пройдет
forceorder стало быть тоже можно не предлагать..


Цитата:
Клиент оракловый?
нет, интересовала версия клиента аксапты (или aos-а, в зависимости от)
c kernel rollup-ами были (вернее, есть) некоторые .. мм.. забавности..

планы наверное не помешали бы
__________________
-ТСЯ или -ТЬСЯ ?
Старый 29.09.2006, 18:28   #5  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Детализация
ЗАПРОС №1
Код:
SELECT /*+ FIRST_ROWS */ A.*, B.* 
FROM CUSTINVOICE4PAYMJOUR_RU A,CUSTINVOICE4PAYMSALESLINK_RU B 
WHERE (SUBSTR(NLS_LOWER(A.DATAAREAID),1,3)=NLS_LOWER('sth')) 
AND ((SUBSTR(NLS_LOWER(B.DATAAREAID),1,3)=NLS_LOWER('sth')) 
AND ((((SUBSTR(NLS_LOWER(A.SALESID),1,20)=SUBSTR(NLS_LOWER(B.SALESID),1,20)) 
AND (SUBSTR(NLS_LOWER(A.INVOICE4PAYMID),1,20)=SUBSTR(NLS_LOWER(B.INVOICE4PAYMID),1,20))) 
AND (A.INVOICE4PAYMDATE=B.INVOICE4PAYMDATE)) 
AND (SUBSTR(NLS_LOWER(B.ORIGSALESID),1,20)=NLS_LOWER('             0099556')))) 
ORDER BY SUBSTR(NLS_LOWER(A.DATAAREAID),1,3),SUBSTR(NLS_LOWER(A.INVOICE4PAYMID),1,20),A.INVOICE4PAYMDATE
План до (медленный)
Код:
6  SELECT STATEMENT
   5  NESTED LOOPS
     2  BMSSA.CUSTINVOICE4PAYMJOUR_RU TABLE ACCESS [BY INDEX ROWID]
       1  BMSSA.I_16003INVOICE4PAYMIDX INDEX [RANGE SCAN]
     4  BMSSA.CUSTINVOICE4PAYMSALESLINK_RU TABLE ACCESS [BY INDEX ROWID]
       3  BMSSA.I_16392INVOICE4PAYMIDX INDEX [RANGE SCAN]
план после (быстрый)
Код:
7  SELECT STATEMENT
   6  SORT [ORDER BY]
     5  NESTED LOOPS
       2  BMSSA.CUSTINVOICE4PAYMSALESLINK_RU TABLE ACCESS [BY INDEX ROWID]
         1  BMSSA.I_16392ORIGSALESIDX INDEX [RANGE SCAN]
       4  BMSSA.CUSTINVOICE4PAYMJOUR_RU TABLE ACCESS [BY INDEX ROWID]
         3  BMSSA.I_16003SALESIDX INDEX [RANGE SCAN]
ЗАПРОС №2
Код:
SELECT /*+ FIRST_ROWS */ A.*, B.* 
FROM CUSTINVOICE4PAYMJOUR_RU A,CUSTINVOICE4PAYMSALESLINK_RU B 
WHERE (SUBSTR(NLS_LOWER(A.DATAAREAID),1,3)=NLS_LOWER('sth')) 
AND ((SUBSTR(NLS_LOWER(B.DATAAREAID),1,3)=NLS_LOWER('sth')) 
AND ((((SUBSTR(NLS_LOWER(A.SALESID),1,20)=SUBSTR(NLS_LOWER(B.SALESID),1,20)) 
AND (SUBSTR(NLS_LOWER(A.INVOICE4PAYMID),1,20)=SUBSTR(NLS_LOWER(B.INVOICE4PAYMID),1,20))) 
AND (A.INVOICE4PAYMDATE=B.INVOICE4PAYMDATE)))) 
ORDER BY SUBSTR(NLS_LOWER(A.DATAAREAID),1,3),SUBSTR(NLS_LOWER(A.INVOICE4PAYMID),1,20),A.INVOICE4PAYMDATE
план до (быстрый)
Код:
6  SELECT STATEMENT
   5  NESTED LOOPS
     2  BMSSA.CUSTINVOICE4PAYMJOUR_RU TABLE ACCESS [BY INDEX ROWID]
       1  BMSSA.I_16003INVOICE4PAYMIDX INDEX [RANGE SCAN]
     4  BMSSA.CUSTINVOICE4PAYMSALESLINK_RU TABLE ACCESS [BY INDEX ROWID]
       3  BMSSA.I_16392INVOICE4PAYMIDX INDEX [RANGE SCAN]
план после (медленный)
Код:
7  SELECT STATEMENT
   6  SORT [ORDER BY]
     5  NESTED LOOPS
       2  BMSSA.CUSTINVOICE4PAYMJOUR_RU TABLE ACCESS [BY INDEX ROWID]
         1  BMSSA.I_16003RECID INDEX [RANGE SCAN]
       4  BMSSA.CUSTINVOICE4PAYMSALESLINK_RU TABLE ACCESS [BY INDEX ROWID]
         3  BMSSA.I_16392INVOICE4PAYMIDX INDEX [RANGE SCAN]

Последний раз редактировалось Wamr; 29.09.2006 в 18:32.
Старый 29.09.2006, 18:33   #6  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Видно, что планы изменились одинаково - вместо выборки по индексу, соответствующего ORDER BY, появляется шаг сортировки (6)

Версия ax32serv.exe 3.0.1951.3730

Последний раз редактировалось Wamr; 29.09.2006 в 18:35.
Старый 17.03.2010, 13:36   #7  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Wamr Посмотреть сообщение
Видно, что планы изменились одинаково - вместо выборки по индексу, соответствующего ORDER BY, появляется шаг сортировки (6)

Версия ax32serv.exe 3.0.1951.3730
Ну это логично, т.к. в таком режиме он не может использовать индексы для сортировки. А при "бинари" он просто берёт подходящий сортировке индекс и (учитывая хинт FIRST_ROWS) берёт по нему первые записи. Другое дело, что с индексом он (оптимизатор), по ходу, в первом запросе не угадал.
Немножко об этих и похожих ситуациях я уже писал тут.

Сорри за некрофилию...
__________________
Zhirenkov Vitaly
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Axapta 3.0SP3RU под Oracle 9.2.* RDBMS George V. Tavrizoff DAX: Администрирование 7 24.10.2008 12:29
Проблемы быстродействия Axapta 3.0 Alexandr A. Osipkin DAX: Администрирование 37 16.02.2007 22:43
Проблема с установкой Axapta 2.5+Oracle 8 Pawlik DAX: Администрирование 3 18.11.2005 10:52
Ускорение выполнения запроса Oracle + MS Axapta Горбунов Дмитрий DAX: Программирование 17 15.11.2005 18:13
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:37.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.