Показать сообщение отдельно
Старый 28.04.2006, 17:47   #1  
Falcon is offline
Falcon
Восставший
Соотечественники
 
753 / 35 (3) +++
Регистрация: 08.02.2002
Адрес: Pincourt, Quebec, Canada
Аксапта. Производительность. Эпизод 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 выключена