При использовании локальной версии DataLens возможно снижение производительности при работе с большими объёмами данных, особенно в случаях:
- работы с сырыми данными из транзакционных систем;
- выполнения сложных запросов в датасетах и чартах;
- одновременного доступа нескольких пользователей.
Ниже постарался привезти все основные подходы и рекомендации по оптимизации локального сервиса.
Если вы работаете с громоздкой производственной базой (например, БАРС), оптимально создать отдельную БД для аналитики, содержащую только нужные для отчетности данные.
Такой подход уже описан в разделе Оптимизация, для облачного сервиса
Подходит как для облачного, так и локального использования.
См. оригинальную документацию: DataLens Optimization Recommendations
Чем меньше строк и столбцов обрабатывается в запросе, тем быстрее будет отклик. Примеры:
- создавать агрегации на уровне БД (через
VIEW
);
- предварительно рассчитывать метрики ETL-обработкой;
- использовать запросы
SELECT COUNT(*)
или SUM(...) GROUP BY
.
- Использовать фильтры по дате или другим параметрам.
- Визуализировать только актуальные или последние данные (например, "за последние 7 дней").
Для чарта или датасета в настройках можно включить кеш:
- Настройки чарта → вкладка Производительность
- Включить кеширование и задать TTL (например, 15 минут)
Если одновременно работает много пользователей, то можно:
- увеличить ресурсы хост-машины (
CPU
, RAM
);
- масштабировать через внешние БД (например, PostgreSQL на другом сервере).
При работе с источниками MS SQL, PostgreSQL и др.:
- проверять план выполнения запроса (execution plan);
- исключать подзапросы и
SELECT *
;
- использать представления (VIEW) с нужными полями;
- применять индексы в БД по используемым фильтрам и
JOIN
.
- использовать вложенные запросы вместо union (структура WITH ...AS {...})Т
- нужно убедиться, что контейнеры DataLens не ограничены в памяти:
- Установить лимит
mem_limit
не менее 2G
в docker-compose.yaml
.
- Использовать отдельный контейнер PostgreSQL для хранения внутренних метаданных.
- При большом трафике – установить nginx с проксированием и сжатиями (gzip).
- Периодически удалять неиспользуемые чарты, датасеты и подключения.
- Следить за объёмом логов docker:
docker system df
- Можно очистить логи через:
docker system prune