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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.09.2006, 14:04   #1  
Paul_ST is offline
Paul_ST
Участник
 
144 / 11 (1) +
Регистрация: 26.11.2003
Адрес: Екатеринбург
Настройки Oracle
Подскажите, пожалуйста, может ли настройка Oracle case sensitive негативно сказываться на быстродействии системы?
Очень настораживают появляющиеся в запросах к БД выражения вида "substr(nls_lower(...)".
Какие могут быть рекоменадции по настройке Oracle под Axapta?
__________________
Paul_ST
Старый 15.09.2006, 14:43   #2  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Главная настройка - взять грамотного DBA на работу, а уж он разберется с работой транзакционной системы на Оракле
Старый 15.09.2006, 15:04   #3  
Paul_ST is offline
Paul_ST
Участник
 
144 / 11 (1) +
Регистрация: 26.11.2003
Адрес: Екатеринбург
взять грамотного специалиста это очень хорошо.
Всё же хотелось бы узнать у тех , кто настраивал использовал свзязку Oracle + Axapta - наблюдается ли в запросах к Oracle "substr(nls_lower())"? Сказывается ли это каким-либо образом на быстродействии?
__________________
Paul_ST
Старый 15.09.2006, 15:10   #4  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Да, наблюдаются. Мало того, все индексы посторены по этим комбинациям.
NLS_LOWER сделано, чтобы запросы были нечувствительны к регистру. SUBSTR - осталось загадкой зачем нужен.
Как влияет на производительность, никто, наверно, не проверял.

Советую сразу снять галку First Row Fix в настройках Аксапты
Старый 15.09.2006, 15:23   #5  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
С производительностью вроде как все нормально. Побочный эффект от NLS_LOWER - поля выбранные через GroupBy будут в нижнем регистре - если их потом записывать в таблицы, или выводить в отчеты - не очень-то красиво.
Старый 15.09.2006, 15:27   #6  
Paul_ST is offline
Paul_ST
Участник
 
144 / 11 (1) +
Регистрация: 26.11.2003
Адрес: Екатеринбург
Special First Row Fix снята.
Может ли всё же переход на case insensitive улучшить ситуацию? Вроде как для MS sql Server под Axapt'у вообще не рекомедуется case insensitive? А для Orcale можно, но с потерей по производительности?
__________________
Paul_ST
Старый 15.09.2006, 15:38   #7  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
1. У вас уже case insensitive - нечувствительны к регистру
2. Без поддержки со стороны ядра Аскапты вы ничего не добьетесь, кроме постоянных проблем.

У вас есть какие-то конкретные проблемы или спрашиваите чисто теоретически?
Старый 15.09.2006, 15:49   #8  
Paul_ST is offline
Paul_ST
Участник
 
144 / 11 (1) +
Регистрация: 26.11.2003
Адрес: Екатеринбург
тестируется конфигурация с загруженными данными. Долго (уже 3 часа) закрывается склад при том, что складских проводок от разнесённых журналов - порядка 200 штук. Правда проводок по неразнесённым журналов порядка 500 000. Может это влияет?
__________________
Paul_ST
Старый 15.09.2006, 15:57   #9  
Paul_ST is offline
Paul_ST
Участник
 
144 / 11 (1) +
Регистрация: 26.11.2003
Адрес: Екатеринбург
кроме того в другой компании в этой же конфигурации и неразнесённых складских проводок порядка сотни, а закрытие склада также черезчур долго выполняется. На локале быстрее происходит закрытие, чем с AOS'ом и сервером Oracle
__________________
Paul_ST
Старый 15.09.2006, 16:35   #10  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
1. смотрите загрузку сети, дисков, процов (везде - сервер БД, АОС, клиент)
2. смотрите исполняемые запросы, планы
Старый 15.09.2006, 18:16   #11  
Paul_ST is offline
Paul_ST
Участник
 
144 / 11 (1) +
Регистрация: 26.11.2003
Адрес: Екатеринбург
посмотрели конечно же. Загрузка процессора аоса - минимальная (близкая к 0), БД - 10 - 25%, клиент - минимальная. Сеть незагружена.
План у выполняемого запроса - работает по индексам.
Однако есть подозрение, что именно substr(nls_lower()) не даёт полноценно сработать оракловскому оптимизатору
__________________
Paul_ST
Старый 15.09.2006, 20:02   #12  
itfs is offline
itfs
Участник
 
277 / 43 (2) +++
Регистрация: 18.07.2005
Адрес: Moscow
У oracle есть functionBasedIndex-ы, которые позволяют ему выкручиваться.

С уважение, itfs.
Старый 16.09.2006, 22:33   #13  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Как я уже говорил, все индексы построены по тем же функциям. Если попытаться запустить запрос без них, то получите Table Scan, то есть оптимизатор работает нормально.
Старый 17.09.2006, 14:36   #14  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Очевидным недостатком аксапты 3.0 в связке с ораклом является невозможность использования покрывающих индексов, если в нем есть хоть одно текстовое поле. Индексы строятся по функциям, запрос на выборку полей идет без функций (не критерии, а именно список полей) - соответственно вместо того чтобы взять значение поля непосредственно из индекса приходится ораклу лазить в данные таблицы - лишие действия, лишние шевеления жесткими дисками и т.д. Однако стоит отметить, что применение покрывающих индексов в аксапте явление нечастое, так что все в итоге не так уж смертельно

Последний раз редактировалось db; 17.09.2006 в 14:49.
За это сообщение автора поблагодарили: ziva (1).
Старый 18.09.2006, 21:27   #15  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от db Посмотреть сообщение
Очевидным недостатком аксапты 3.0 в связке с ораклом является невозможность использования покрывающих индексов, если в нем есть хоть одно текстовое поле. Индексы строятся по функциям, запрос на выборку полей идет без функций (не критерии, а именно список полей) - соответственно вместо того чтобы взять значение поля непосредственно из индекса приходится ораклу лазить в данные таблицы - лишие действия, лишние шевеления жесткими дисками и т.д. Однако стоит отметить, что применение покрывающих индексов в аксапте явление нечастое, так что все в итоге не так уж смертельно
Можно попробовать это обойти используя Group By
В этом случае в самом Select -е в списке полей идут функции от полей, а не сами поля
Правда это не всегда возможно.
Может получиться еще более тяжелый запрос...
Старый 13.11.2006, 13:10   #16  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
Можно попробовать это обойти используя Group By
В этом случае в самом Select -е в списке полей идут функции от полей, а не сами поля
Правда это не всегда возможно.
Может получиться еще более тяжелый запрос...
Не, обмануть не получается
пишем в аксапте запрос
X++:
select ItemId from inventTrans group by ItemId;
На Oracle дейсвительно уходит функции от поля в списке выборки

X++:
SELECT SUBSTR(NLS_LOWER(A.ITEMID),1,20)
FROM INVENTTRANS A
GROUP BY SUBSTR(NLS_LOWER(A.ITEMID),1,20)
ORDER BY SUBSTR(NLS_LOWER(A.ITEMID),1,20)
На InventTrans достаточно индексов, содержащих SUBSTR(NLS_LOWER(A.ITEMID),1,20)

Но план запроса такой

OPERATION OPTIONS OBJECT_NAME ID PARENT_ID POSITION
------------------------------ ------------------------------ ------------------------------ ---------- ---------- ----------
SELECT STATEMENT 0 8379
SORT GROUP BY 1 0 1
TABLE ACCESS FULL INVENTTRANS 2 1 1
Если отрезать GROUP BY и ORDER BY то все приходит в норму

X++:
SELECT SUBSTR(NLS_LOWER(A.ITEMID),1,20)
FROM INVENTTRANS A
OPERATION OPTIONS OBJECT_NAME ID PARENT_ID POSITION
------------------------------ ------------------------------ ------------------------------ ---------- ---------- ----------
SELECT STATEMENT 0 420
INDEX FAST FULL SCAN I_177OPENITEMIDX 1 0 1

Если вместо GROUP BY сделать DISTINCT, то то же все по индексу

X++:
SELECT DISTINCT SUBSTR(NLS_LOWER(A.ITEMID),1,20)
FROM INVENTTRANS A
OPERATION OPTIONS OBJECT_NAME ID PARENT_ID POSITION
------------------------------ ------------------------------ ------------------------------ ---------- ---------- ----------
SELECT STATEMENT 0 3253
SORT UNIQUE 1 0 1
INDEX FAST FULL SCAN I_177OPENITEMIDX 2 1 1

В общем не получается получить и рыбку и удовольствие ...
Пробовал
ORA EE 9.2.0.6.0 64 bit Production под Linux
ORA EE 9.2.0.7.0 под Windows

Если у кого есть идеи как все таки заставить использовать данные из покрывающих функциональных индексов (кроме прямых SQL запросов) поделитесь пжл

Насчет отказа от функциональных индексов в принципе. Вроде как в 10R2 появился нормальный режим Case Insensitive (NLS_SORT=BINARY_CI, NLS_COMP=LINGUISTIC) Это бы позволило и от функциональных индексов избавится и с MONOCASE не заморачиваться.

10-ку ни разу не щупал и вообще спецом по ораклу себя не считаю.
Есть ли у кого опыт работы с Case Insensitive?
Старый 13.11.2006, 15:43   #17  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
У меня отдаленые воспоминая из прочтения запросов под Oracle, что оптимизатор с Group By начинает нормально работать, если в выборке есть группировочная функция (count, min, max и т.п.)
Каков будет план, если запрос сделать таким:
select ItemId, max(ItemId) from inventTrans group by ItemId?
Старый 13.11.2006, 16:27   #18  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от db Посмотреть сообщение
Не, обмануть не получается
Ну так я примерно это и имел в виду когда писал что "Может получиться еще более тяжелый запрос..."

А вообще план исполнения сильно зависит от настроек оракла, возможно получится как нить довинтить настройки чтоб оптимизатор выбирал нужный план запроса.
Старый 13.11.2006, 16:35   #19  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
Ну так я примерно это и имел в виду когда писал что "Может получиться еще более тяжелый запрос..."

А вообще план исполнения сильно зависит от настроек оракла, возможно получится как нить довинтить настройки чтоб оптимизатор выбирал нужный план запроса.
так я без претензий просто в одной задаче реально помогло бы сократить время обработки с часов до секунд

Цитата:
Сообщение от KiselevSA Посмотреть сообщение
У меня отдаленые воспоминая из прочтения запросов под Oracle, что оптимизатор с Group By начинает нормально работать, если в выборке есть группировочная функция (count, min, max и т.п.)
Каков будет план, если запрос сделать таким:
select ItemId, max(ItemId) from inventTrans group by ItemId?
И так то же не выходит

В аксапте
X++:
select maxof(itemId) from inventtrans group by ItemId;
или
X++:
select ItemId, maxof(itemId) from inventtrans group by ItemId;
на оракл уже уходит max без функций

SELECT MAX(A.ITEMID),SUBSTR(NLS_LOWER(A.ITEMID),1,20)
FROM INVENTTRANS A
GROUP BY SUBSTR(NLS_LOWER(A.ITEMID),1,20)
ORDER BY SUBSTR(NLS_LOWER(A.ITEMID),1,20)

план соответственно с полным сканированием

Заставить брать данные из индекса можно только приведя
запрос к следующему виду

SELECT MAX(SUBSTR(NLS_LOWER(A.ITEMID),1,20))
FROM INVENTTRANS A
GROUP BY SUBSTR(NLS_LOWER(A.ITEMID),1,20)

т.е чтобы макс брался от функций и не было сортировки
как такое выдать аксапты не используя прямые соединения у меня идей нет. а их использовать не хочется
Старый 13.11.2006, 16:39   #20  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Так юзал кто нито NLS_SORT=BINARY_CI, NLS_COMP=LINGUISTIC в 10-ке?
Похоже придется таки поставить очередного монстра для опытов
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Установка Dynamics 4.0 под Oracle Paul_ST DAX: Администрирование 6 20.04.2007 16:36
aEremenko: История об установке Microsoft Dynamics Ax 4.0 и Oracle 10G Blog bot DAX Blogs 0 28.10.2006 16:01
Настройки хранения Oracle ZVV DAX: Администрирование 0 24.05.2004 19:15
Знатокам Oracle listener DAX: Администрирование 1 23.01.2004 10:53
Проблемы настройки прав доступа пользователям axot DAX: Администрирование 25 16.05.2002 10:47

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

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

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