Структура и метрики Query Profile
Обзор
Query Profile — это подробный отчет, который предоставляет информацию о выполнении SQL-запроса в Selena. Он п редлагает комплексное представление о производительности запроса, включая время, затраченное на каждую операцию, объем обработанных данных и другие соответствующие метрики. Эта информация неоценима для оптимизации производительности запросов, выявления узких мест и устранения неполадок.
80% медленных запросов в реальных условиях решаются путем обнаружения одной из трех критических метрик. Эта шпаргалка поможет вам найти их, прежде чем вы утонете в цифрах.
Быстрый старт
Профилирование недавнего запроса:
1. Список недавних ID запросов
Для анализа профиля запроса необходим ID запроса. Используйте SHOW PROFILELIST;:
SHOW PROFILELIST;
SHOW PROFILELIST подробно описан в Текстовый анализ Query Profile. Обратитесь к этой странице, если вы только начинаете.
2. Откройте профиль рядом с вашим SQL
Выполните ANALYZE PROFILE FOR <query_id>\G или нажмите Profile в веб-интерфейсе CelerData.
3. Просмотрите баннер "Execution Overview"
Изучите ключевые метрики для общей производительности выполнения:
- QueryExecutionWallTime: Общее время выполнения запроса по настенным часам
- QueryPeakMemoryUsagePerNode: Пиковое использование памяти на узел, значения превышающие 80% памяти BE указывают на потенциальные риски переполнения данных или ошибок нехватки памяти (OOM)
- QueryCumulativeCpuTime / WallTime < 0.5 * num_cpu_cores означает, что CPU ожидает (вероятно, I/O или сеть)
Если ни одна из них не срабатывает, ваш запрос обычно в порядке — остановитесь здесь.
4. Углубитесь на один уровень
Определите операторы, которые потребляют больше всего времени или памяти, проанализируйте их метрики и определите основную причину для выявления узких мест производительности.
Раздел "Operator Metrics" предлагает множество рекомендаций для помощи в выявлении первопричины проблем с производительностью.
Основные концепции
Поток выполнения запроса
Компле ксный поток выполнения SQL-запроса включает следующие этапы:
- Планирование: Запрос проходит парсинг, анализ и оптимизацию, завершающиеся генерацией плана запроса.
- Планирование: Планировщик и координатор работают вместе для распределения плана запроса по всем участвующим backend-узлам.
- Выполнение: План запроса выполняется с использованием движка конвейерного выполнения.

Структура плана запроса
Движок выполнения Selena разработан для выполнения запросов в распределенном режиме, и структура Query Profile отражает этот дизайн. Следующие компоненты составляют распределенный план запроса:
- Fragment: Высший уровень дерева выполнения, представляющий логическую единицу работы. Запрос может быть разделен на один или несколько фрагментов.
- FragmentInstance: Каждый фрагмент создается несколько раз, при этом каждый экземпляр (FragmentInstance) выполняется на разном вычислительном узле. Это позволяет параллельную обработку между узлами.
- Pipeline: FragmentInstance далее разделяется на несколько конвейеров, которые являются последовательностями соединенных экземпляров Operator. Конвейеры определяют путь выполнения для FragmentInstance.
- PipelineDriver: Для максимального использования вычислительных ресурсов каждый конвейер может иметь несколько экземпляров, известных как PipelineDrivers. Эти драйверы выполняют конвейер параллельно, используя несколько вычислительных ядер.
- Operator: Основная единица выполнения, экземпляр Operator является частью PipelineDriver. Операторы реализуют специфические алгоритмы, такие как агрегация, соединение или сканирование, для обработки данных.

Концепции движка конвейерного выполнения
Pipeline Engine является ключевым компонентом движка выполнения Selena. Он отвечает за выполнение плана запроса параллельным и эффективным способом. Pipeline Engine разработан для обработки сложных планов запросов и больших объемов данных, обеспечивая высокую производительность и масштабируемость.
Ключевые концепции в Pipeline Engine:
- Operator: Основная единица выполнения, отвечающая за реализацию специфических алгоритмов (например, агрегация, соединение, сканирование)
- Pipeline: Последовательность соединенных экземпляров Operator, представляющая путь выполнения
- PipelineDriver: Несколько экземпляров конвейера для параллельного выполнения
- Schedule: Неблокирующее планирование конвейеров с использованием пользовательского разделения времени
