|
13.08.2008, 12:14 | #1 |
Участник
|
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 |
Участник
|
А почему бы не использовать sys.dbms_system в логон триггере?
|
|
15.08.2008, 13:08 | #3 |
Участник
|
конечно можно, как вариант, такие костыли расставить, поддерживать этот триггер....но хотелось бы узнать как это поменять в самой аксапте и вообще возможно ли это
|
|
17.08.2008, 01:27 | #4 |
Участник
|
Цитата:
PHP код:
Цитата:
X++: bool SqlConnectBase::dblogin() { // ... if ( SqlConnectBase::loginRun() && SqlConnectBase::loginSetupConnection() && ... ) return true; } PHP код:
Цитата:
X++: if ( SqlSystem::databaseBackendId() == DatabaseId::Oracle && SqlConnectBaseObj.parm().offs0x6A == true ) SqlConnectBaseObj.executeDirectNoTrace("ALTER SESSION SET OPTIMIZER_INDEX_COST_ADJ = 1"); |
|
|
За это сообщение автора поблагодарили: Logger (4), aidsua (1). |
15.08.2008, 13:37 | #5 |
Moderator
|
Можешь попробовать посмотреть в файл axsysru.ktd и axsysen-us.ktd. Там помнится были волшебые слова, которые аксапта посылает на сервер в начале любой открытой сесии с ораклом или сиквелом (причем они конечно разные и для оракла и для сиквела). Не факт, правда, что тебе это поможет. Возможно они ДО index_cost_adj посылаются. Но попробовать стоит
|
|
15.08.2008, 17:05 | #6 |
Участник
|
Цитата:
#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 |
Moderator
|
Угу. Это в ax32serv.exe прописано. Если его в режиме Unicode открыть и посмотреть - то видно. Просто есть надежда что если в ktd-файле поковыряться - удастся дефолтное поведение перекрыть.
Надо будет, кстати, поискать волшебное ключевое слово в 2009ом ax32serv.exe. |
|
15.08.2008, 18:18 | #8 |
Участник
|
Цитата:
под 2-tier,значение изменилось=))) З.ы. под 3-tier эффекта никакого Последний раз редактировалось ring; 15.08.2008 в 18:24. |
|
15.08.2008, 18:23 | #9 |
Moderator
|
Кстати - небольшой совет. Еще по опыту версии 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 |
Участник
|
К сожалению выставить желаемое значение optimizer_index_cost_adj под 3-tier так и не удалось ни с помощью редактирования ktd файлов ни даже с помощью LOGON триггера на оракле (странно но факт) , под 2-tier всё работает....
|
|
28.08.2008, 13:49 | #11 |
MCITP
|
Ну тут нет ничего странного... ЛогонТриггер отрабатывает сразу после логина, и то что вы там делаете Аксапта сразу же после этого благополучно затирает.
__________________
Zhirenkov Vitaly |
|
28.08.2008, 14:30 | #12 |
Участник
|
|
|
28.08.2008, 16:35 | #13 |
MCITP
|
Надо пробовать, я не уверен. Аксапта то (трёхзвенка) не работает с одним выделенным соединением. Т.е. дополнительные соединения которые открываются для номерных серий например, это точно не подхватят.
А вот насчёт "основных" соединений, я не уверен на 100%, но помойму АОС может создавать дополнительные сессии в пуле "на лету" для тех клиентских сеансов которые, например, долго не подавали признаков активности. И тогда тоже облом.
__________________
Zhirenkov Vitaly |
|
28.08.2008, 17:22 | #14 |
Участник
|
|
|
18.08.2008, 12:13 | #15 |
Участник
|
Выскажу крамольную мысль.
В указанной строке есть как раз пара пробелов. Можно попробовать заменить на нули. Догнать 1 до 100. Как говорится если нельзя, но очень хочется, то можно |
|
18.08.2008, 12:22 | #16 |
Участник
|
Остаёться править ax32serv.exe =)
|
|
18.08.2008, 12:50 | #17 |
NavAx
|
В общем, взяли 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 |
NavAx
|
Апдейт: чтобы вообще сервер эту строку не отправлял, в файле 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 |
Участник
|
|
|
18.08.2008, 14:06 | #20 |
Участник
|
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 |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|