При анализе работы пользователей с хранилищем данных мы часто сталкиваемся с ситуациями, когда пользователи неоправданно тратят ресурсы в ситуации, когда этого можно избежать. Ниже некоторые рекомендации по работе с отчетами на основе баз данных mybi connect
- Обновляйте отчеты только при наличии новых данных
Встречаются случаи, когда обновление отчета настроено, например, раз в час, а обновление данных происходит только раз в сутки. Если вы не настраивали дополнительных обновлений, то не нужно обновлять данные и в отчетах чаще, чем раз в день
- Отключите параллельную загрузку данных в отчетах
Использование параллельной загрузки данных рекомендуется разработчиками BI-систем для ускорения загрузки отчета. При этом не учитывается тот факт, что скорость отдачи данных сервисом физически ограничивается возможностями серверов (количеством запросов, которые одновременно может выполнить сервер) и пропускной способностью канала передачи данных. Как результат, вместо ускорения обновления отчета запросы становятся в очередь выполнения на сервере и вы получаете ошибку обновления. Отчет рекомендуется обновлять в один поток
- Обновляйте разные отчеты в разное время
Если вы используете для одного хранилища несколько отчетов, постарайтесь настроить их обновление таким образом, чтобы они выполнялись в разное время. Запуск обновления нескольких отчетов одновременно приведет к тому, что отчеты будут обновляться долго, либо не обновятся вообще из-за превышения лимита одновременных подключений
- Обновляйте в разное время данные в хранилище и данные в отчетах
Еще одна “проблемная” ситуация – попытка обновить данные в отчете в то время, когда идет выгрузка данных из источника. Как результат – некорректные данные в отчете, которые были запрошены, например, в момент, когда старые данные за период уже удалены, а новые еще не выгружены.
- Используйте материализованные представления вместо простых в случае сложных запросов
Может возникнуть ситуация, когда для сложного сборного отчета на основе многих источников вам нужно получить “выжимку” данных из хранилища mybi connect. Вы создаете представление с агрегированными данными, вставляете в отчет и далее обновляете его чаще, чем обновляются данные в хранилище. Как результат, при запросе данных из представления сервер заново их рассчитывает. Вместо такого режима можно создать материализованное представление, которое будет обновляться, например, ежесуточно после выгрузки данных запуском специального задания, а при запросе данных в отчет ресурсы серверов на их расчет тратиться уже не будут
- Используйте модели данных в BI-системах
Часто мы наблюдаем обратную ситуацию – несмотря на богатые возможности системы, в которой строятся отчеты (например, MS Power BI) вместо построения модели данных пользователи сами пытаются писать прямой SQL-запрос. Однако наиболее корректным вариантом будет импорт данных в BI-систему и дальнейшая обработка данных уже в ней, что, при построении правильной реляционной модели, будет гораздо эффективнее, чем на стороне сервера
- Тестируйте и оптимизируйте запросы перед включением их в отчеты
Для написания грамотного SQL-запроса, который не создаст излишней нагрузки на сервер обработки данных необходимы достаточные компетенции и опыт работы с базами данных. Сервис предоставляет возможность создать копию БД для последующей локальной установки на стороне клиента для тестирования и отладки запросов. Для повышения уровня владения языком SQL мы также приглашаем вас пройти обучающий курс Learn DB
- Используйте индексацию полей при связях данных по полям, которые не имеют индексов
Встречаются случаи, когда пользователи строят выборки по каким-либо идентификаторам, поля которых не имеют индексов по умолчанию. Изначально база данных для экономии места индексирует только самые важные поля. Если вам необходим такой поиск на постоянной основе, то, добавив индекс на это поле (необходимы компетенции по работе с PostgreSQL), вы можете значительно сократить время выполнения запроса