06.03.2006, 11:29 | #1 |
MCTS
|
Долгая синхронизация
Всем здравствуйте!
Подскажите, плиз, что-нибудь, по следующем проблеме: полная синхронизация всех таблиц в Axapta занимает 30-40 минут, хотя по идее должна занимать минут 5. Скорее всего, что проблема кроется в БД - Oracle. Конфигурация следующая: Axapta 3.0 SP4 + Oracle 10g. |
|
06.03.2006, 11:47 | #2 |
Участник
|
Скорей всего была изменена EDT, или индекс изменён на табличке занимающей серьёзный объём. Ведь, после такой долгой синхронизации последующие опять проходят быстро?
|
|
06.03.2006, 11:57 | #3 |
Участник
|
Или делается попытка синхронизации таблицы, которая используется кем-то другим - блокировка схемы ждет завершения всех остальных блокировок.
|
|
06.03.2006, 12:06 | #4 |
MCTS
|
Нет, каждый раз синхронизация длится столько времени, причем число активных пользователей == 1
|
|
10.03.2006, 17:08 | #5 |
Участник
|
У нас та же ситуация на Oracel 10. Уже почти привыкли. А откуда информация, что должно быть 5 минут?
С уважением, itfs. |
|
04.08.2006, 15:55 | #6 |
Участник
|
Коллеги, первый раз ставлю Axapta на Oracle, та же проблема - слишком долгая синхронизация. Кто-нибудь выяснил причину этой беды?
|
|
14.12.2006, 12:18 | #7 |
Роман Долгополов (RDOL)
|
Цитата:
Причина - запрос, который выдает ядро аксапты для определения списков полей индексов таблицы, например 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 код:
|
|
|
За это сообщение автора поблагодарили: Dron AKA andy (3), Vadik (3), raz (3), Logger (6), Bars (1), ziva (2), Eldar9x (1), ring (1). |
14.12.2006, 12:43 | #8 |
Участник
|
Кстати, 10ка официально не поддерживается с 3.0
|
|
14.12.2006, 13:27 | #9 |
Moderator
|
Насколько я знаю, с 4 SP1 вполне
|
|
14.12.2006, 14:24 | #10 |
Moderator
|
А откуда такая инфа, если не секрет?
__________________
Андрей. |
|
14.12.2006, 18:02 | #11 |
Участник
|
Если взять с Partner Source Kernel Rollup 3 и прочитать readme.doc, то там есть упоминание, что поддерживаемая версия 9.2.0.2
А 10 ка только с 4.0 |
|
14.12.2006, 19:29 | #12 |
Участник
|
|
|
14.12.2006, 21:06 | #13 |
Роман Долгополов (RDOL)
|
Цитата:
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 |
Участник
|
SYS.USER_INDEXES увы, всего лишь вьюха. На нее ON COMMIT не подействует. Но даже если сделать MV на основе скрипта этой veiw, у ON COMMIT - ограничение, действует только на "основную" таблицу запроса, так что ваш вариант по обновлению, видимо, единственный.
С уважением, itfs. |
|
07.11.2008, 15:27 | #15 |
MCTS
|
Тормоза в AOT
а все, нашел
вобщем, при сохранении в AOT или в проекте уходит долгое время. Это для тех, кто на оракле сидит. Оказалось, дело было в этом Долгая синхронизация, там же и ответил. Последний раз редактировалось Gustav; 07.11.2008 в 16:51. Причина: перенес сюда, чтобы отдельно не болталась тема с одним сообщением |
|
07.11.2008, 15:46 | #16 |
MCTS
|
Небольшая модификация для разработчиков:
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, полезное, синхронизация баз, тормоза |
|
Похожие темы | ||||
Тема | Ответов | |||
Синхронизация таблицы - проблема | 3 | |||
навязчивая синхронизация | 11 | |||
Синхронизация таблиц при изменении EDT | 1 | |||
Репликация и синхронизация | 12 | |||
синхронизация с outlook | 7 |
|