Примерно 4 года назад мы перенесли нашу систему отчётности с Oracle на SAP Hana. Сегодня в ней хранится около 10 000 таблиц, ею пользуется 38 000 человек и в ней ежедневно происходят более 5000 процессов загрузки. На текущий момент наш комплекс, на котором работает система, представляет собой 8 серверов с 14 Тб памяти. Каждый день в системе отчётности обрабатывается 1,5 Пб данных. При этом Hana оказалась примерно в 20 раз производительнее Oracle, DB2 и MySQL. И сегодня я хочу рассказать, как мы в рамках интеграции «М.Видео» и «Эльдорадо» дополнительно повышали производительность системы отчётности, какие оптимизации вносили.

Нагрузка


Сегодня из нескольких тысяч отчётов, создаваемых системой, всего 10 генерируют 70% всей нагрузки. Самый тяжелый отчёт в базе данных Hana — Weekly Bussines Review. Он выполняется 30 минут и потребляет 4 Тб памяти. 90% всех отчётов генерирует контактный центр: мы создали сервис, который при звонке клиента по номеру его телефона автоматически открывает отчёт и показывает оператору всю историю покупок звонящего и его взаимодействия с компанией.

Модель данных


Ключевая модель данных, на которой строится основной объем отчётов, содержит 1500 таблиц. Большинство из них — таблицы справочников. С помощью этой модели можно проанализировать любое направление деятельности компании. На примере — визуализация модели данных, созданная с помощью Universe designer. Правда, она отражает только десятую часть нашей системы.



Производительность


На момент объединения «М.Видео» и «Эльдорадо», объем данных в двух системах отчётности был около 10 Тб: 7 Тб в системе BW on HANA «М.Видео», 2 Тб — в BW on HANA «Эльдорадо» и 1 Тб дополнительных данных в HADOOP (исторические данные). При объединении систем у нас были аппаратные ограничения: комплекс «М.Видео» состоял из 6 нод (по 2 Тб), в том числе одна резервная. Эту систему можно было расширить максимум до 8 нод, из которых одна резервная.

При подготовке к объединению мы предполагали, что общий объем всех данных достигнет 13 Тб. Поэтому, исходя из рекомендаций SAP, нам необходима была система из 16 нод по 2 Тб, в том числе две резервные. Также один узел нужно было выделить в качестве мастер-ноды, которая при таком объёме информации брала бы на себя функции управления. То есть для корректной работы нужно было развернуть 13 нод.

Как видите, доступных ресурсов категорически не хватало. И это был первый вызов.

Второй главной трудностью до объединения было то, что скорость работы системы часто не удовлетворяла запросам бизнеса. Основной причиной было большое количество параллельных обращений к БД. С точки зрения системы это выглядело как снежный ком, который мог привести либо к зависанию и прерыванию работы части процессов, либо даже к глобальным дампам «out of memory» на узлах.

Было понятно, что без существенных доработок двукратное увеличение объёмов данных в отчётах (для двух брендов) приведёт к примерно двукратному ухудшению ситуации.

Поэтому мы решили оптимизировать систему по следующим направлениям:

  • Отчётность. Ускорение наиболее критичных и наиболее ресурсоёмких отчётов и пересмотр модели данных.
  • Хранилище. Архивация и оптимизация хранения.
  • Загрузки. Оптимизация процедуры и изменение расписания загрузок.

Общий подход к оптимизации был таким:



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

Что мы сделали:

  • Изменили конфигурацию серверов приложений ABAP: количество инстанций, эффективное использование технологии NUMA и оптимальное количество рабочих процессов.
  • Применили оптимальные параметры HANA и операционной системы Linux.
  • Проанализировали снижение потребления ЦПУ.
  • Проанализировали потребление ОЗУ во всём наблюдаемом интервале времени.
  • Проанализировали возникновение OOM на HANA.
  • Проанализировали возникновение блокировок в системе и доступности системных ресурсов по операциям ожидания (wait).
  • Проанализировали балансировку данных с учётом редистрибуции и репартицирования данных для решения SCALE-OUT HANA.
  • Проанализировали причины ABAP-дампов, влияющих на работу критически важных цепочек.

По результатам составили отчёты о производительности, а также инструкции, чтобы в дальнейшем можно было самостоятельно определять узкие места в системе и пиковые интервалы времени.

Каких результатов удалось добиться:









Ряд оптимизированных отчётов SAP BO стали работать во много раз быстрее и потреблять в сотни раз меньше памяти.



Вот несколько ярких примеров того, как система некорректно отрабатывает условия выбора, и как нужно правильно строить запросы в HANA.

Выявлены проблемы при фильтрации по нематериализованным объектам, особенно (!) при использовании показателей COUNT DISTINCT (CD может быть прописан как на уровне Universe, так и в функции в CV).



Даже если исключить CD из запроса, первый вариант всё равно будет выполняться в 20 раз медленнее, чем второй, а при CD скорость получается выше более чем в 500 раз.



Частный случай использования нематериализованных объектов в фильтрах: составные фильтры из двух и более объектов, например, склеивание недели и года:



Запросы со склеенными фильтрами работают не так медленно, как преобразование в дату, но всё же сильно замедляют запросы (примерно в 2-3 раза).



Для сбора статистики о работе системы отчётности, процессов загрузки и цепочек мы разработали такую схему:



При этом во все отчёты мы добавили специальный комментарий с названием отчёта. Таким образом, мы можем сравнивать нагрузку от различных частей системы и сравнивать период к периоду.



Планы


У нас много планов по развитию бизнес-функциональности и существенной переработке инструмента визуализации данных. Глобальный тренд, в котором мы активно участвуем, заключается во встраивании системы отчётности в парадигму цифровой трансформации.

Что имеется в виду?

Когда наша система отчётности была молода, к нам часто приходили пользователи с подобными просьбами: «Автоматизируйте построение отчёта, который показывает, сколько чистой прибыли получил тот или иной магазин, или вся компания».

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

А сегодня мы пришли к тому, что пользователи хотят знать точный прогноз чистой прибыли. У нас есть все необходимые данные для разработки алгоритмов прогнозирования, и есть специалисты по анализу данных, способные создавать модели машинного обучения. Как вы понимаете, для этого нужны действительно большие объёмы данных, так что один из главных трендов в развитии нашей системы отчётности — переход к анализу и созданию моделей на основе big data.

Пара слов о нашей команде


Сегодня в крупных компаниях всё чаще внедряют системы прогнозирования, которые построены на алгоритмах машинного обучения, разрабатываемых самой системой. Два года назад у нас появился центр компетенции в сфере анализа данных Digital Retail Data Science Centre, а в этом году у нас появилась группа data-инженеров. Мы внедряем новую систему для обработки и анализа больших данных. И нам в команду нужны люди в отделы поддержки, развития и прикладного анализа данных.

Если вам интересны эти направления, если чувствуете в себе силы — добро пожаловать! Вас ждёт интересная и непростая работа, иногда стрессовая, но всегда творческая.

Комментарии (3)


  1. LeshaLS
    31.07.2019 15:27

    Сегодня из нескольких тысяч отчётов, создаваемых системой, всего 10 генерируют 70% всей нагрузки.

    Основным способом оптимизации отчетов является преподсчет информации, а затем инкрементное ее обновление по мере появления новых данных. Скажите, а почему нельзя было сделать это для этих 10 отчетов? То есть, грубо говоря, если они генерирует столько нагрузки, значит они постоянно «пробегают» по большому количеству информации и считают какие-то агрегирующие функции. Почему их не рассчитать заранее, а в отчетах уже обращаться к ним (по сути, схожая схема реализована в OLAP)?


  1. am-habr
    01.08.2019 01:29

    … создали сервис, который при звонке клиента по номеру его телефона автоматически открывает отчёт и показывает оператору всю историю покупок звонящего

    Недельный отчёт открывается 30мин. А сколько времени открывается операционный при звонке клиента?
    В своё время в похожем проекте приняли 10 секунд как максимально терпимое.
    Недельные отрабатывали тоже по полчаса. Это всё было 11 лет назад. Вот интересно, что изменилось с тех пор.


  1. krids
    01.08.2019 13:25

    При этом Hana оказалась примерно в 20 раз производительнее Oracle, DB2 и MySQL.

    У Oracle/DB2 тоже было 8 нод и 14 TB RAM? ;)

    Поэтому, исходя из рекомендаций SAP, нам необходима была система из 16 нод по 2 Тб,

    Почему не 11 x 3 TB? Меньше нод — меньше проблем.
    Вариант перехода на scale-up + BW NLS на IQ не рассматривали?

    Применили оптимальные параметры HANA и операционной системы Linux.

    Что именно и насколько крутили не поделитесь?