Трассировка транзакций и поиск провалов производительности

Если вдруг какая-то транзакция (отчёт) сильно притормаживает или даже виснет, то далеко не каждый администратор, консультант или продвинутый пользователь способен разобраться в этой проблеме.

С одной стороны администратор – это человек которому ничего не говорят транзакции и объекты бизнес-процессов, а с другой стороны консультанты и пользователи ничего не смыслят в базисе и программировании.

Есть несколько разных способов, пригодных для решения этой проблемы.

Самое главное – это выбрать достаточно точные шаги по многоразовому воспроизведению проблемы.

Один из основных – это динамический анализ (транзакция SE30).

 

Динамический анализ

Указываем нужную транзакцию и нажимаем “Выполнить”. Затем проходим нужные шаги, где обнаруживается проблема производительности.

Если программа хорошо “повисела” для анализа, то можно и скинуть её через меню окна:

Закрытие транзакции

В таком случае операция обычно прерывается, а изменения в базе данных не записываются.

Затем заходим снова в транзакцию SE30, и уже в нижней части окна смотрим на образовавшийся журнал:

Выбор файла анализа

Нажимаем кнопку “Анализ” и смотрим на диаграмму:

Просмотр распределения

Вот в данном случае тут видно, что основной провал производительности находится в базе данных.

Затем щёлкаем по иконке рангового списка и получаем развёрнутый анализ:

Подробный анализ производительности

И вот на этом этапе уже нужно “включать мозги” и анализировать.

Данный пример очень простой:  “Нетто” одной операции занимает всё основное время работы (247 206 049 микросекунд = 247 секунд):

Проблемная строка в анализе

Здесь и кроется проблема – проблема в выборке из таблицы MSEG.

Выделяем строку, нажимаем кнопку “Просмотреть исходный текст” и попадаем на нужный кусок программы:

Соотвтетствующий фрагмент исходного кода

В данном случае мы видим, что данный оператор выполнялся как минимум 247 секунд, что является недопустимым.

Если копнуть в эту таблицу, то можно обнаружить что:

Можно включить отладку, можно посмотреть индексы данной таблицы – здесь уже начинаются вариации на каждый конкретный случай. А можно сразу обратиться к администраторам или разработчикам для решения этой проблемы – локализация проблемы выполнена почти полностью.

Базисники или разработчики разбираются с проблемой, после этого проверяется решение и делаются выводы – может быть необходим ещё один шаг трассировки производительности.

PS. О трассировке SQL и других мелких полезняшках может расскажу как-нибудь потом при подвернувшемся случае.

Опубликовано 08.09.2010 в 14:10 · Автор ivan · Ссылка
Рубрики: ABAP

Написать комментарий