Аксапта. Производительность. Эпизод 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 выключена
|