28.04.2006, 17:47 | #1 |
Восставший
|
Аксапта. Производительность. Эпизод n+1-й
Вот говорят: если проблемы с производительностью, то проверьте, насколько оптимизированы ваши запросы.
Берем функцию Accounts Receivable->Periodic->Sales Update->Invoice (да простят меня за английские названия...). Нажимаем кнопочку Select. В ней указаны следующие поля: SalesLine - Stopped = No SalesTable - Giro money transfer slip on sales invoice = None. Больше ничего не указано, хотя разумеется, есть скрытые поля ограничений (SalesLine-Type = SalesOrder, SalesLine-Status= Delivered...) Нажимаем кнопочку OK И тут случается чудо Иногда "ответ" появляется в течение 10 минут Иногда - через 3 часа (!) Иногда выскакивает Deadlock on SalesLine (при том, заметьте, что в Аксапте один-единственный юзер!) Пытаемся делать SQL Statement Trace Log (с ограничением: время запроса выше 1000 мс) - получаем такие результаты Execution time Record size Records per fetch 2202 2962 8 5256 5315 4 1229 559 43 4917 5315 4 3861 2488 2 Execution time, разумеется, в миллисекундах. То есть две записи из SalesLine выбираются в течение почти четырех (!) секунд. Всего записей в SalesLine - 140 тыс, в SalesOrder - 60 тыс. Почему так? Почему одна и та же выборка по одной и той же таблице, в одних и тех же примерно условиях (количество юзеров, нагрузка на систему и пр.) - занимает время, разнящаеся на порядки? В нормальном состоянии один fetch ведь по идее должен занимать десятки миллисекунд, не больше? Да, и откуда вообще берутся дедлоки? По-моему, проблема локализована до предела - и тем не менее, я не вижу, как ее решить. Помогите, пожалуйста. Спасибо. П.С. Ax 3.0 SP2, Intl, IMTS выключена |
|