Профилирование и трассировка на уровне отдельных запросов

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
Компания Яндекс
Учебный семестр Осень 2018
Учебный курс 3-4-й курс
Максимальное количество студентов, выбравших проект: ?



В ClickHouse уделяется большое внимание интроспекции производительности запросов. Существует системная таблица с логом запросов, а также с логом всех потоков, участвующих в параллельной обработке запроса. В эти таблицы записываются счётчики производительности, отслеживаемые во время выполнения запроса, что позволяет детально посмотреть, сколько и каких ресурсов было потрачено, что является узким местом. Но есть потребность иметь возможность включить сбор ещё более детальных данных для конкретных запросов.

Для начала мы встроим в ClickHouse сэмплирующий профайлер уровня запроса. С указанной периодичностью (согласно cpu time или wall clock time), в потоках выполнения запроса будут собираться стек трейсы и записываться в отдельную системную таблицу, что позволит построить профиль (например, в виде flame graph) отдельных запросов.

Далее мы попробуем обобщить счётчики производительности, ограничения на использования ресурсов, и трейспоинты. Трейспоинты позволяют динамически добавлять вызов нужного кода в определённые места в программе. Это может быть логгирование, sleep или fault injection для отладки. Одновременно с этим попробуем воспользоваться функциональностью X-Ray, доступной в LLVM.

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