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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.03.2006, 11:29   #1  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
? Долгая синхронизация
Всем здравствуйте!
Подскажите, плиз, что-нибудь, по следующем проблеме: полная синхронизация всех таблиц в Axapta занимает 30-40 минут, хотя по идее должна занимать минут 5. Скорее всего, что проблема кроется в БД - Oracle.
Конфигурация следующая: Axapta 3.0 SP4 + Oracle 10g.
Старый 06.03.2006, 11:47   #2  
savel is offline
savel
Участник
 
74 / 13 (1) ++
Регистрация: 26.02.2004
Адрес: Санкт-Петербург
Скорей всего была изменена EDT, или индекс изменён на табличке занимающей серьёзный объём. Ведь, после такой долгой синхронизации последующие опять проходят быстро?
Старый 06.03.2006, 11:57   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Или делается попытка синхронизации таблицы, которая используется кем-то другим - блокировка схемы ждет завершения всех остальных блокировок.
__________________
полезное на axForum, github, vk, coub.
Старый 06.03.2006, 12:06   #4  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Нет, каждый раз синхронизация длится столько времени, причем число активных пользователей == 1
Старый 10.03.2006, 17:08   #5  
itfs is offline
itfs
Участник
 
277 / 43 (2) +++
Регистрация: 18.07.2005
Адрес: Moscow
У нас та же ситуация на Oracel 10. Уже почти привыкли. А откуда информация, что должно быть 5 минут?

С уважением, itfs.
Старый 04.08.2006, 15:55   #6  
Davido is offline
Davido
Участник
 
4 / 11 (1) +
Регистрация: 10.11.2004
Адрес: Moscow
Коллеги, первый раз ставлю Axapta на Oracle, та же проблема - слишком долгая синхронизация. Кто-нибудь выяснил причину этой беды?
Старый 14.12.2006, 12:18   #7  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Цитата:
Сообщение от Davido Посмотреть сообщение
Коллеги, первый раз ставлю Axapta на Oracle, та же проблема - слишком долгая синхронизация.

Кто-нибудь выяснил причину этой беды?
Вчера нарвался на то же самое при переходе на 10-ку.
Причина - запрос, который выдает ядро аксапты для определения списков полей индексов таблицы, например

SELECT a.index_name, b.column_name, c.column_expression, a.index_type, a.uniqueness
FROM user_indexes a, user_ind_columns b, user_ind_expressions c
WHERE b.table_name=UPPER('INVENTLOCATION') AND a.index_name=b.index_name
AND b.index_name=c.index_name(+) AND b.column_position=c.column_position(+) ;

10-ка уходит в себя на 2-3 секунды на каждом таком запросе

Помогло бы индексирование системных таблиц (OBJ$ и прочих) по которым построены эти вьюхи по полю NAME, но

оракл на такие провокации не поддается "ORA-00701 object necessary for warmstarting database cannot be altered"

В итоге создал материализованные вьюхи USER_INDEXES и USER_IND_COLUMNS и проиндексировал их прямо в схеме юзера под которым работает аксапта. Синхронизация после этого 4-5 минут. Никаких побочных эффектов пока не найдено, но гарантий дать не могу

Скрипт для создания вьюшек

PHP код:
CREATE MATERIALIZED VIEW "USER_INDEXES"
  
AS select "INDEX_NAME","INDEX_TYPE","TABLE_OWNER","TABLE_NAME","TABLE_TYPE",
    
"UNIQUENESS","COMPRESSION","PREFIX_LENGTH","TABLESPACE_NAME",
    
"INI_TRANS","MAX_TRANS","INITIAL_EXTENT","NEXT_EXTENT",
    
"MIN_EXTENTS","MAX_EXTENTS","PCT_INCREASE","PCT_THRESHOLD",
    
"INCLUDE_COLUMN","FREELISTS","FREELIST_GROUPS","PCT_FREE",
    
"LOGGING","BLEVEL","LEAF_BLOCKS","DISTINCT_KEYS",
    
"AVG_LEAF_BLOCKS_PER_KEY","AVG_DATA_BLOCKS_PER_KEY",
    
"CLUSTERING_FACTOR","STATUS","NUM_ROWS","SAMPLE_SIZE",
    
"LAST_ANALYZED","DEGREE","INSTANCES","PARTITIONED",
    
"TEMPORARY","GENERATED","SECONDARY","BUFFER_POOL",
    
"USER_STATS","DURATION","PCT_DIRECT_ACCESS","ITYP_OWNER",
    
"ITYP_NAME","PARAMETERS","GLOBAL_STATS","DOMIDX_STATUS",
    
"DOMIDX_OPSTATUS","FUNCIDX_STATUS","JOIN_INDEX",
    
"IOT_REDUNDANT_PKEY_ELIM","DROPPED" FROM "SYS"."USER_INDEXES";

  
CREATE MATERIALIZED VIEW "USER_IND_COLUMNS"
  
AS select "INDEX_NAME",
    
"TABLE_NAME","COLUMN_NAME","COLUMN_POSITION","COLUMN_LENGTH",
    
"CHAR_LENGTH","DESCEND" FROM "SYS"."USER_IND_COLUMNS";

CREATE UNIQUE INDEX "T_USER_IDX_1" 
    
ON "USER_INDEXES"  ("INDEX_NAME") ;

CREATE INDEX "T_USER_IND_COLUMNS_IDX_1" 
    
ON "USER_IND_COLUMNS"  ("INDEX_NAME""COLUMN_POSITION");

CREATE INDEX "T_USER_IND_COLUMNS_IDX_2" 
    
ON "USER_IND_COLUMNS"  ("TABLE_NAME") ; 
За это сообщение автора поблагодарили: Dron AKA andy (3), Vadik (3), raz (3), Logger (6), Bars (1), ziva (2), Eldar9x (1), ring (1).
Старый 14.12.2006, 12:43   #8  
Alex05507 is offline
Alex05507
Участник
Сотрудники Microsoft Dynamics
 
33 / 12 (1) ++
Регистрация: 17.10.2005
Кстати, 10ка официально не поддерживается с 3.0
Старый 14.12.2006, 13:27   #9  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Насколько я знаю, с 4 SP1 вполне
Старый 14.12.2006, 14:24   #10  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Цитата:
Сообщение от Alex05507 Посмотреть сообщение
Кстати, 10ка официально не поддерживается с 3.0
А откуда такая инфа, если не секрет?
__________________
Андрей.
Старый 14.12.2006, 18:02   #11  
Alex05507 is offline
Alex05507
Участник
Сотрудники Microsoft Dynamics
 
33 / 12 (1) ++
Регистрация: 17.10.2005
Если взять с Partner Source Kernel Rollup 3 и прочитать readme.doc, то там есть упоминание, что поддерживаемая версия 9.2.0.2
А 10 ка только с 4.0
Старый 14.12.2006, 19:29   #12  
itfs is offline
itfs
Участник
 
277 / 43 (2) +++
Регистрация: 18.07.2005
Адрес: Moscow
Цитата:
Сообщение от db Посмотреть сообщение
В итоге создал материализованные вьюхи USER_INDEXES и USER_IND_COLUMNS
[/PHP]
Идея интересная, но ведь MV refresh-ить надо иначе они устареют.

С уважением, itfs.
Старый 14.12.2006, 21:06   #13  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Цитата:
Сообщение от itfs Посмотреть сообщение
Идея интересная, но ведь MV refresh-ить надо иначе они устареют.

С уважением, itfs.
Ясен хрен надо. Совсем задолбался со всем этим переосом - забыл аксаптовский код приложить. Надо немного подправить appl.dbSynchronize. Вьюшки будут рефрешиться перед каждой синхронизацией. Созданы они с параметром REFRESH по умолчанию, т.е. FORCE (по изменениям, если не выйдет, то целиком) - рефрешатся обе вместе около одной секунды. Синхронизацию аксапта вызывает при любом сохранении объекта в АОТ, но ИМХО лучше помечтать секунду при сохранении объекта, чем мечтать почти час при полной синхронизации. Прикрутить автоматическое обновление прям на сервере ON COMMIT к этим вьюшкам у меня не получилось (хотя надо признать не очень то и старался). Если кто все таки сделает обновление ON COMMIT, расскажите пжл

X++:
boolean dbSynchronize(tableId tableId         = 0,   // 0 = all tables, non-zero is a valid table handle
                      boolean syncAsNeeded    = true,  // true = objects touched in the AOT, false = unconditional synchronize
                      boolean continueOnError = true,
                      boolean showProgress    = true ) // true = report all problems, but throw only after all tables are synchronized, false = stop synchronize after first error/problem
{
    SqlSyncPending  sqlSyncPending = new SqlSyncPending();
    boolean         ok;
    ;

    setPrefix("@SYS22807");

    if (SqlSystem::databaseBackendId() == DataBaseId::Oracle)
    {
        new Connection().createStatement().executeUpdate("BEGIN DBMS_MVIEW.REFRESH('USER_IND_COLUMNS, USER_INDEXES'); END;");
    }

    ok = super(tableId, syncAsNeeded, continueOnError, showProgress);

    if (ok && this.isRunningMode())
    {
        SysApplicationSetup::saveApplicationVersion(SysApplicationSetupMode::Synhronize);
    }


    return ok;
}
За это сообщение автора поблагодарили: Logger (3), itfs (1).
Старый 15.12.2006, 13:10   #14  
itfs is offline
itfs
Участник
 
277 / 43 (2) +++
Регистрация: 18.07.2005
Адрес: Moscow
Цитата:
Сообщение от db Посмотреть сообщение
Если кто все таки сделает обновление ON COMMIT, расскажите пжл
SYS.USER_INDEXES увы, всего лишь вьюха. На нее ON COMMIT не подействует. Но даже если сделать MV на основе скрипта этой veiw, у ON COMMIT - ограничение, действует только на "основную" таблицу запроса, так что ваш вариант по обновлению, видимо, единственный.

С уважением, itfs.
Старый 07.11.2008, 15:27   #15  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Тормоза в AOT
а все, нашел

вобщем, при сохранении в AOT или в проекте уходит долгое время. Это для тех, кто на оракле сидит. Оказалось, дело было в этом Долгая синхронизация, там же и ответил.

Последний раз редактировалось Gustav; 07.11.2008 в 16:51. Причина: перенес сюда, чтобы отдельно не болталась тема с одним сообщением
Старый 07.11.2008, 15:46   #16  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Небольшая модификация для разработчиков:
X++:
boolean dbSynchronize(tableId tableId         = 0,   // 0 = all tables, non-zero is a valid table handle
                      boolean syncAsNeeded    = true,  // true = objects touched in the AOT, false = unconditional synchronize
                      boolean continueOnError = true,
                      boolean showProgress    = true ) // true = report all problems, but throw only after all tables are synchronized, false = stop synchronize after first error/problem
{
    SqlSyncPending  sqlSyncPending = new SqlSyncPending();
    boolean         ok;
    ;

    setPrefix("@SYS22807");

    if (!syncAsNeeded && SqlSystem::databaseBackendId() == DataBaseId::Oracle)
    {
        new Connection().createStatement().executeUpdate("BEGIN DBMS_MVIEW.REFRESH('USER_IND_COLUMNS, USER_INDEXES'); END;");
    }

    ok = super(tableId, syncAsNeeded, continueOnError, showProgress);

    if (ok && this.isRunningMode())
    {
        SysApplicationSetup::saveApplicationVersion(SysApplicationSetupMode::Synhronize);
    }


    return ok;
}
иначе тормозит сохранение объектов
За это сообщение автора поблагодарили: raz (5), Logger (3).
Теги
ax3.0, oracle, полезное, синхронизация баз, тормоза

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Синхронизация таблицы - проблема TasmanianDevil DAX: Администрирование 3 30.10.2006 09:41
навязчивая синхронизация Антон Солдатов DAX: Функционал 11 22.04.2005 11:04
Синхронизация таблиц при изменении EDT z_av DAX: Программирование 1 16.12.2004 11:55
Репликация и синхронизация Tays DAX: Администрирование 12 24.11.2004 12:18
синхронизация с outlook alpine DAX: Функционал 7 09.06.2004 13:53
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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