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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.08.2008, 12:14   #1  
ring is offline
ring
Участник
 
11 / 10 (1) +
Регистрация: 24.06.2008
Axapta 3.0 sp3+oracle 10.2.0.3 optimizer_index_cost_adj
опытным путём было выявлено что параметр (optimizer_index_cost_adj) в каждой аксаптовской сессии(3-tier) меняется со 100(default) на 1 в связи с этим оптимизатор oracle всегда выбирает чтение по индексу, вместо full table scan что в моём случае нежелательно.Возвратить всё на круги своя можно через

begin
sys.dbms_system.set_int_param_in_session(SID, SERIAL, 'optimizer_index_cost_adj', 100);
end;
/
Но это конечно же не выход из положения=))) т.к. пользователей более 300...

Вопрос: почему акспата меняет deafult значение optimizer_index_cost_adj внутри какдой новой открытой сессии и как заставить её использовать нужное мне значение
Старый 15.08.2008, 12:01   #2  
cryomice is offline
cryomice
Участник
 
3 / 10 (1) +
Регистрация: 27.11.2004
Адрес: Ижевск
А почему бы не использовать sys.dbms_system в логон триггере?
Старый 15.08.2008, 13:08   #3  
ring is offline
ring
Участник
 
11 / 10 (1) +
Регистрация: 24.06.2008
конечно можно, как вариант, такие костыли расставить, поддерживать этот триггер....но хотелось бы узнать как это поменять в самой аксапте и вообще возможно ли это
Старый 17.08.2008, 01:27   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от fed Посмотреть сообщение
Надо будет, кстати, поискать волшебное ключевое слово в 2009ом ax32serv.exe.
Есть оно там - никуда не девалось. Как пошло с первой версии 3-ки (а, может, и раньше) прописанное строковой константой
PHP код:
ALTER SESSION SET OPTIMIZER_INDEX_COST_ADJ 
так и в 2009-й версии сохранилось.
Цитата:
Сообщение от ring Посмотреть сообщение
дописал alter session set optimizer_index_cost_adj = 100 в axsysru.ktd в клиенте,зашёл под 2-tier,значение изменилось=)))
Очень интересно. Вообще, «изнутри» это все выглядит примерно так
X++:
bool SqlConnectBase::dblogin()
{
    // ...
    if (   SqlConnectBase::loginRun()
        && SqlConnectBase::loginSetupConnection()
        && ...
       )
         return true;
}
здесь все указанные методы SqlConnectBase не являются статическими, но лишь показаны для наглядности в связке с SqlConnectBase. Так вот, во-первых, обработка строк ktd идет в SqlConnectBase::loginRun(), а строка
PHP код:
ALTER SESSION SET OPTIMIZER_INDEX_COST_ADJ 
отcылается на Oracle в методе SqlConnectBase::loginSetupConnection(), т.е. уже после обработки строк из ktd (хотя в последних версиях ядра что-то могло и поменться, надо проверить).
Цитата:
Сообщение от ring Посмотреть сообщение
хотелось бы узнать как это поменять в самой аксапте и вообще возможно ли это
как уже упоминалось, установка optimizer_index_cost_adj == 1 зашита в ядре в виде строкового литерала и в связи с этим значение optimizer_index_cost_adj в Аксапте не настраивается, однако, отправка на СУБД указанного SQL-запроса происходит отнюдь не безусловно, а примерно так (это упрощенный псевдокод, где SqlConnectBaseObj - экземпляр класса SqlConnectBase или производного от него):
X++:
if (    SqlSystem::databaseBackendId()    == DatabaseId::Oracle
     && SqlConnectBaseObj.parm().offs0x6A == true
   )
    SqlConnectBaseObj.executeDirectNoTrace("ALTER SESSION SET OPTIMIZER_INDEX_COST_ADJ = 1");
но вот дальше докопаться уже сложней. Упоминание о SqlConnectBase удалось найти в патенте Microsoft №20070220155 «Server session management application program interface and schema», но, к сожалению, более детальных описаний упоминаемых там классов я не нашел, поэтому что за объект возвращает метод parm(), и что находится по смещению 0x6A этого объекта, выяснить не удалось. Между тем, видимо, если бы удалось "управлять" данным свойством возвращаемого объекта, то отправку указанного запроса на Oracle можно было бы предотвратить.
За это сообщение автора поблагодарили: Logger (4), aidsua (1).
Старый 15.08.2008, 13:37   #5  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,894 / 5650 (194) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Можешь попробовать посмотреть в файл axsysru.ktd и axsysen-us.ktd. Там помнится были волшебые слова, которые аксапта посылает на сервер в начале любой открытой сесии с ораклом или сиквелом (причем они конечно разные и для оракла и для сиквела). Не факт, правда, что тебе это поможет. Возможно они ДО index_cost_adj посылаются. Но попробовать стоит
Старый 15.08.2008, 17:05   #6  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
#319
>MSG_SQL_POST_INITXAL
>SKIPTRANS 1-99
>
>This is the SQL PostInitNonSql-trigger, i.e. SQL statements executed
>automatically and unconditionally by the kernel.
>
>The SQL below is divided into database (kernel) specific sections,
>each section starting with an ID enclosed in brackets. The ID consists
>of the string 'SQLID' followed by the internal Microsoft Business Solutions-Axapta SQL database
>identification number (e.g. Oracle is '3', etc).
>
[SQLID3]
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,'
ALTER SESSION SET NLS_SORT = 'binary'
[SQLID1]
походу вот это имелось в виду.

Только index_cost_adj - там нет.
Старый 15.08.2008, 17:44   #7  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,894 / 5650 (194) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от Logger Посмотреть сообщение
походу вот это имелось в виду.

Только index_cost_adj - там нет.
Угу. Это в ax32serv.exe прописано. Если его в режиме Unicode открыть и посмотреть - то видно. Просто есть надежда что если в ktd-файле поковыряться - удастся дефолтное поведение перекрыть.

Надо будет, кстати, поискать волшебное ключевое слово в 2009ом ax32serv.exe.
Старый 15.08.2008, 18:18   #8  
ring is offline
ring
Участник
 
11 / 10 (1) +
Регистрация: 24.06.2008
Цитата:
Сообщение от fed Посмотреть сообщение
Угу. Это в ax32serv.exe прописано. Если его в режиме Unicode открыть и посмотреть - то видно. Просто есть надежда что если в ktd-файле поковыряться - удастся дефолтное поведение перекрыть.

Надо будет, кстати, поискать волшебное ключевое слово в 2009ом ax32serv.exe.
дописал alter session set optimizer_index_cost_adj = 100 в axsysru.ktd в клиенте,зашёл
под 2-tier,значение изменилось=)))

З.ы. под 3-tier эффекта никакого

Последний раз редактировалось ring; 15.08.2008 в 18:24.
Старый 15.08.2008, 18:23   #9  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,894 / 5650 (194) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Кстати - небольшой совет. Еще по опыту версии 2.1 я убедился, что если что-то в axsysru.ktd меняешь, то надо бы аналогичную правку и в прочих .ktd файлах сделать. Просто вроде бы системное соединение, которое ax32serv.exe открывает, использует то ли axsysen-us.ktd, то ли axsysen-uk.ktd. В общем - я во времена 2.1 на этом деле однажды кучу проблем поимел и просто стал во всех ktd-файлах не думая править...
P.S. А в трехзвенке надо править файлы на сервере. Я бы подправил и в application\bin и в server\bin

Последний раз редактировалось fed; 15.08.2008 в 22:34.
За это сообщение автора поблагодарили: Logger (4).
Старый 18.08.2008, 11:55   #10  
ring is offline
ring
Участник
 
11 / 10 (1) +
Регистрация: 24.06.2008
К сожалению выставить желаемое значение optimizer_index_cost_adj под 3-tier так и не удалось ни с помощью редактирования ktd файлов ни даже с помощью LOGON триггера на оракле (странно но факт) , под 2-tier всё работает....
Старый 28.08.2008, 13:49   #11  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от ring Посмотреть сообщение
К сожалению выставить желаемое значение optimizer_index_cost_adj под 3-tier так и не удалось ни с помощью редактирования ktd файлов ни даже с помощью LOGON триггера на оракле (странно но факт) , под 2-tier всё работает....
Ну тут нет ничего странного... ЛогонТриггер отрабатывает сразу после логина, и то что вы там делаете Аксапта сразу же после этого благополучно затирает.
__________________
Zhirenkov Vitaly
Старый 28.08.2008, 14:30   #12  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Цитата:
Сообщение от ZVV Посмотреть сообщение
Ну тут нет ничего странного... ЛогонТриггер отрабатывает сразу после логина, и то что вы там делаете Аксапта сразу же после этого благополучно затирает.
Может тогда в info.startuppost прописать вызов прямого запроса через CCADO и установить нужное значение ?
Старый 28.08.2008, 16:35   #13  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
Надо пробовать, я не уверен. Аксапта то (трёхзвенка) не работает с одним выделенным соединением. Т.е. дополнительные соединения которые открываются для номерных серий например, это точно не подхватят.
А вот насчёт "основных" соединений, я не уверен на 100%, но помойму АОС может создавать дополнительные сессии в пуле "на лету" для тех клиентских сеансов которые, например, долго не подавали признаков активности. И тогда тоже облом.
__________________
Zhirenkov Vitaly
Старый 28.08.2008, 17:22   #14  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Цитата:
Сообщение от ZVV Посмотреть сообщение
А вот насчёт "основных" соединений, я не уверен на 100%, но помойму АОС может создавать дополнительные сессии в пуле "на лету"
А, точно - есть такая фича, про это я подзабыл.
Старый 18.08.2008, 12:13   #15  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Выскажу крамольную мысль.
В указанной строке есть как раз пара пробелов. Можно попробовать заменить на нули. Догнать 1 до 100.

Как говорится если нельзя, но очень хочется, то можно
Старый 18.08.2008, 12:22   #16  
ring is offline
ring
Участник
 
11 / 10 (1) +
Регистрация: 24.06.2008
Остаёться править ax32serv.exe =)
Старый 18.08.2008, 12:50   #17  
Maximin is offline
Maximin
NavAx
NavAx Club
 
409 / 341 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
В общем, взяли hiew и запатчили ax32serv.exe и axcom.dll - заработало и в 3х-уровневой.
Спасибо MS за оставленные пробелы до и после знака равно в строке "optimizer_index_cost_adj = 1"
Про необходимость правки axcom.dll - не уверен, правили везде "чтобы наверняка".
.ktd файлы можно не трогать - работает и без этого.
Для двухуровневой, соотв. необходим так же патченный клиент.
Upd: Уточню - axcom.dll необходимо править, чтобы сессия Axapta COM Connector тоже была с нужными параметрами.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...

Последний раз редактировалось Maximin; 18.08.2008 в 13:20.
За это сообщение автора поблагодарили: Logger (3).
Старый 18.08.2008, 13:19   #18  
Maximin is offline
Maximin
NavAx
NavAx Club
 
409 / 341 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Апдейт: чтобы вообще сервер эту строку не отправлял, в файле ax32serv.exe версии 3.0.1951.3730
по адресу 000С1923 заменить байт 74 на EB. В формате .pth:
000С1923: 74 EB.
В остальных версиях нужно искать строку 8A 48 6A 84 C9 74 17 6A 00 6A и менять в ней 74 в середине, опять же, на EB.

С таким сервером всё работает так, как настроено в Oracle. Кстати, там же можно открутить параметр "QUERY_REWRITE_ENABLED".
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...

Последний раз редактировалось Maximin; 18.08.2008 в 13:41.
За это сообщение автора поблагодарили: aidsua (1).
Старый 18.08.2008, 13:57   #19  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Maximin Посмотреть сообщение
Кстати, там же можно открутить параметр "QUERY_REWRITE_ENABLED".
А это что за зверь ?
Старый 18.08.2008, 14:06   #20  
ring is offline
ring
Участник
 
11 / 10 (1) +
Регистрация: 24.06.2008
Цитата:
Сообщение от Logger Посмотреть сообщение
А это что за зверь ?
One of the major benefits of creating and maintaining materialized views is the ability to take advantage of query rewrite, which transforms a SQL statement expressed in terms of tables or views into a statement accessing one or more materialized views that are defined on the detail tables. The transformation is transparent to the end user or application, requiring no intervention and no reference to the materialized view in the SQL statement. Because query rewrite is transparent, materialized views can be added or dropped just like indexes without invalidating the SQL in the application code.
Теги
oracle, производительность, ax2009, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Axapta 3.0SP3RU под Oracle 9.2.* RDBMS George V. Tavrizoff DAX: Администрирование 7 24.10.2008 12:29
AXAPTA 2.5 SP3 и Internet Explorer 7.0 Владимир Максимов DAX: Прочие вопросы 6 30.05.2007 12:51
Как осуществить экспорт данных из Axapta 3.0 CIS SP3 в Axapta 3.0 CIS (без SP)? Кирилл DAX: Администрирование 3 24.05.2006 13:58
Ускорение выполнения запроса Oracle + MS Axapta Горбунов Дмитрий DAX: Программирование 17 15.11.2005 18:13
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

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

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

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