25.12.2006, 10:14 | #1 |
Участник
|
Axapta 3.0 без SP.
Доброго времени суток! Нужна помощь. Ошибка: "Сессия работы на сервере Navision Axapta не может быть продолжена из-за возникновения критической ошибки. Непоправимая ошибка возникла в процессе обработки сервером приложения последнего запроса. Попытайтесь подключиться к системе снова и повторить операцию. Если ошибка повторяется, обратитесь к вашему администратору." Появилась 01, 15 ноября, затем в декабре появляется каждый день. В списке ошибок Windows на сервере не отображается. Предположительно, начинает появляться после: 1.Выборка по неиндексированному полю. 2.Сложный отчёт - оборотная ведомость и т.д. Возникает при попытке формировния любого отчёта, у которого RunOn == Server, сразу после нажатия "ОК". После демонстрации текста ошибки Аксапта У пользователя вылетает. Вообще, все отчёты заметно медленнее формируются (заметно стало 2 последних месяца). В таблице InventTrans 2 млн. записей. Вопросы. 1.Как устранить ошибку? 2.Таблица InventSumLogTTS - для чего она и можно ли её очистить (20 млн. записей)? |
|
25.12.2006, 12:40 | #2 |
Участник
|
Попробуй полностью персторить индексы всей базы.
Eсли MS SQL 2000 то в QA команда. Use DbName SET NOCOUNT ON DECLARE @TableName char(32) DECLARE SysCur CURSOR FOR SELECT name FROM sysobjects WHERE type='U' OPEN SysCur FETCH NEXT FROM SysCur INTO @TableName WHILE @@FETCH_STATUS=0 BEGIN DBCC DBREINDEX(@TableName) FETCH NEXT FROM SysCur INTO @TableName END CLOSE SysCur DEALLOCATE SysCur |
|
26.12.2006, 09:24 | #3 |
Участник
|
Изменения за сутки:
1.Изменили настройки АОСа (закладка Database) Timeout connection after being idle for = '600' Literals from join queries from forms and reports = 'No' Literals from complex joins from X++ = 'No' Ошибка пока не проявляется. Производительность немного увеличилась. 2.Про таблицу InventSumLogTTS почитал Axforum => Очистили её с помощью truncate на SQL сервере => На производиетльность никак не повлияло. Вопрос: Можно ли ускорить формирование таких отчётов, как "Оборотная ведомость по складу", "Физ.наличие по складам" или лучше написать свои отчёты? |
|
26.12.2006, 13:28 | #4 |
Участник
|
Цитата:
Насчет писать свои - не уверен, может быть. См. http://axapta.mazzy.ru/lib/inventsumdate/ |
|
27.12.2006, 13:01 | #5 |
Участник
|
mazzy, Спасибо!
"Оборотную ведомость по складу" начали переделывать по Вашей рекомендации http://axapta.mazzy.ru/lib/inventsumdate/. Ошибка, заявленная в заголовке темы, больше не появляется. Хотя это очень странно. |
|
22.02.2007, 09:42 | #6 |
Участник
|
По поводу ускорения отчётов.
Модифицировал стандартный фyнкционал в части расчёта физ. наличия на дату. На таблице InventTrans создал метод аналогично методу class InventSumDatePhysicalDim:nHandQty(), но с одним Select'ом. Работает быстро. Например, создание журнала инвентаризации ускорилось ~ в 100 раз. Расхождения в данных пока не замечено. |
|
22.02.2007, 12:09 | #7 |
Участник
|
Цитата:
Проверяли монопольно? Сколько пользователей работало одновременно с вашей проверкой? Что сказали пользователи пока работал ваш отчет? На каком объеме данных вы делали проверку? Типичная ошибка многих - повышать производительность отдельно взятого запроса на небольшом объеме данных. Задача программиста - повысить ОБЩУЮ производительность работы. Чтобы все пользователи системы работали относительно быстро. Чтобы не было такого, что один работает, а остальные курят бамбук. Особенно на многогигабайтных данных. |
|
22.02.2007, 14:16 | #8 |
Участник
|
To mazzy
Модифицировалось автоматическое создание журнала инвентаризации, как самая тяжёлая задача. Проверяли в рабочей базе ~ 50 пользователей. Одновременно (теоретически) могут запустить инвентаризацию не более 3-х пользователей. Пользователи не ругались. Наоборот. InventTrans ~ 3 млн. записей. Цитата:
Цитата:
Остальные пользователи в это время с трудом проводили любые складские операции. Возможно, при увеличении базы в 10раз будут отрицательные эффекты. Но очевидно, что стандартный отчёт на большой базе не завершится вообще никогда... |
|
22.02.2007, 14:26 | #9 |
Участник
|
Цитата:
http://axapta.mazzy.ru/lib/journaltrans_insert/ Цитата:
А сколько человек одновременно с вами создавало складские проводки? Цитата:
Цитата:
Оценку алгоритм дает исходя из максимального количества строк, которое вы задали в диалоге. А не на основании фактического количества. Странно. А длинные запросы у себя отслеживали? http://axapta.mazzy.ru/lib/querytuning/ Цитата:
Это не повод делать заплатку, которая через некоторое время превратиться в узкое место. Это повод проанализировать проблемы быстродействия вашей системы в целом. |
|
22.02.2007, 15:00 | #10 |
Участник
|
Цитата:
Запросы выполняются достаточно быстро (в среднем ~ 20 мс). НО! В стандартном механизме создания строк журнала инвентаризации для расчёта количества inventJournalTrans.inventOnHand используется класс InventSumDate (а это уже не один запрос, а 10-20). Плюс на подготовку и запись строки 150мс. Итого в среднем на строку 500мс. Если 30 000 строк: 30 000 * 0,5 (с) / 3600 (с/час) = 2,8 часа. Это долго. Что тут можно оптимизировать? Наверное, только модифицировать алгоритм... В том числе и алгоритм записи строк. |
|
22.02.2007, 15:08 | #11 |
Участник
|
Цитата:
Пока читайте здесь http://axapta.mazzy.ru/lib/inventsumdate/ Пошел считать количество запросов. |
|
22.02.2007, 15:33 | #12 |
Участник
|
Цитата:
InventCountCreate_Base.createInventJournalTrans Во-вторых, вызывается InventSumDatePhysicalDim:nHandQty(...) В-третьих, вызывается не 10-20 запросов, а 5 1. inventsum 2. для разнесенных финансово (для вычитания из inventSum) 3. для разнесенных физически (для вычитания из inventSum) 4. для скомплектованных (для вычитания из inventSum) 5. для зарегистрированных (для вычитания из inventSum) Если вы сумели получить эти данные ОДНИМ(!) запросом, снимаю шляпу. Но, скорее всего, вы написали ваш единственный исходя из сильно упрощенных предположений. Кстати, если у вас не используется комплектация/регистрация/физические разноски, то запросы по ним должны выполняться очень быстро, поскольку должны возвращать пустой recordset. Если же вы используете, то 2,3,4,5 запросы при правильной работе должны возвращать очень небольшую выборку... Скорее всего, тормоза в стандартном запросе связаны не с количеством запросов, а с наличием index hint'ов. Но index hint и вообще index'ы надо настраивать для всей системы. В общем, не убедили. Скорее всего, вы просто не ухаживаете за вашей Аксаптой. Скорее всего, при переписывании вы сильно упрощаете и обрезаете свой функционал (в дальнейшем вам будет очень сложно его включить обратно) |
|
22.02.2007, 15:39 | #13 |
Участник
|
|
|