Профилирование и трассировка на уровне отдельных запросов
Компания | Яндекс |
Учебный семестр | Осень 2018 |
Учебный курс | 3-4-й курс |
Максимальное количество студентов, выбравших проект: ? | |
В ClickHouse уделяется большое внимание интроспекции производительности запросов. Существует системная таблица с логом запросов, а также с логом всех потоков, участвующих в параллельной обработке запроса. В эти таблицы записываются счётчики производительности, отслеживаемые во время выполнения запроса, что позволяет детально посмотреть, сколько и каких ресурсов было потрачено, что является узким местом. Но есть потребность иметь возможность включить сбор ещё более детальных данных для конкретных запросов.
Для начала мы встроим в ClickHouse сэмплирующий профайлер уровня запроса. С указанной периодичностью (согласно cpu time или wall clock time), в потоках выполнения запроса будут собираться стек трейсы и записываться в отдельную системную таблицу, что позволит построить профиль (например, в виде flame graph) отдельных запросов.
Далее мы попробуем обобщить счётчики производительности, ограничения на использования ресурсов, и трейспоинты. Трейспоинты позволяют динамически добавлять вызов нужного кода в определённые места в программе. Это может быть логгирование, sleep или fault injection для отладки. Одновременно с этим попробуем воспользоваться функциональностью X-Ray, доступной в LLVM.
Также в рамках работы мы добавим в системную таблицу информацию обо всех прочитанных файлах во время обработки запроса и о каждом использованном столбце всех таблиц, участвующих в обработке запроса.