Обзор системных таблиц
Обзор системных таблиц
Системные таблицы предоставляют информацию о:
- Состоянии сервера, процессах и окружении.
- Внутренних процессах сервера.
- Опциях, использованных при сборке бинарного файла ClickHouse.
Системные таблицы:
- Находятся в базе данных
system. - Доступны только для чтения данных.
- Не могут быть удалены или изменены, но могут быть отсоединены.
Большинство системных таблиц хранят свои данные в оперативной памяти. Сервер ClickHouse создает такие системные таблицы при запуске.
В отличие от других системных таблиц, системные журнальные таблицы metric_log, query_log, query_thread_log, trace_log, part_log, crash_log, text_log и backup_log обслуживаются движком таблицы MergeTree и по умолчанию хранят свои данные в файловой системе. Если вы удалите таблицу из файловой системы, сервер ClickHouse создаст пустую таблицу заново при следующей записи данных. Если схема системной таблицы изменилась в новом релизе, ClickHouse переименовывает текущую таблицу и создает новую.
Таблицы системных журналов можно настраивать, создавая конфигурационный файл с тем же именем, что и таблица, в каталоге /etc/clickhouse-server/config.d/, или задавая соответствующие элементы в /etc/clickhouse-server/config.xml. Настраиваемые элементы:
database: база данных, к которой относится системная журнальная таблица. Этот параметр сейчас устарел. Все системные журнальные таблицы находятся в базе данныхsystem.table: таблица для записи данных.partition_by: выражение PARTITION BY.ttl: выражение TTL таблицы.flush_interval_milliseconds: интервал сброса данных на диск.engine: полное выражение движка (начиная сENGINE =) с параметрами. Этот параметр конфликтует сpartition_byиttl. При одновременной установке сервер сгенерирует исключение и завершит работу.
Пример:
По умолчанию рост таблицы не ограничен. Чтобы контролировать размер таблицы, вы можете использовать настройки TTL для удаления устаревших записей логов. Также вы можете использовать механизм партиционирования таблиц движка MergeTree.
Источники системных метрик
Для сбора системных метрик сервер ClickHouse использует:
- привилегию
CAP_NET_ADMIN. - procfs (только в Linux).
procfs
Если сервер ClickHouse не имеет привилегии CAP_NET_ADMIN, он пытается использовать ProcfsMetricsProvider. ProcfsMetricsProvider позволяет собирать системные метрики на уровне отдельных запросов (по CPU и I/O).
Если procfs поддерживается и включён в системе, сервер ClickHouse собирает следующие метрики:
OSCPUVirtualTimeMicrosecondsOSCPUWaitMicrosecondsOSIOWaitMicrosecondsOSReadCharsOSWriteCharsOSReadBytesOSWriteBytes
OSIOWaitMicroseconds по умолчанию отключена в ядрах Linux, начиная с версии 5.14.x.
Вы можете включить её с помощью sudo sysctl kernel.task_delayacct=1 или создав файл .conf в /etc/sysctl.d/ с содержимым kernel.task_delayacct = 1
Системные таблицы в ClickHouse Cloud
В ClickHouse Cloud системные таблицы предоставляют критически важную информацию о состоянии и производительности сервиса, так же, как и в развертываниях с самостоятельным управлением. Некоторые системные таблицы работают на уровне всего кластера, особенно те, которые получают данные с узлов Keeper, управляющих распределёнными метаданными. Эти таблицы отражают совокупное состояние кластера и должны возвращать согласованные данные при выполнении запросов с отдельных узлов. Например, таблица parts должна возвращать согласованные данные независимо от узла, с которого выполняется запрос:
Напротив, другие системные таблицы являются специфичными для узла, например, хранятся в памяти или сохраняют свои данные с использованием движка таблиц MergeTree. Это характерно для данных, таких как журналы (логи) и метрики. Такое постоянное хранение обеспечивает доступность исторических данных для анализа. Однако эти специфичные для узла таблицы по своей сути уникальны для каждого отдельного узла.
В общем случае при определении того, является ли системная таблица специфичной для узла, можно руководствоваться следующими правилами:
- Системные таблицы с суффиксом
_log. - Системные таблицы, предоставляющие метрики, например
metrics,asynchronous_metrics,events. - Системные таблицы, отражающие выполняющиеся процессы, например
processes,merges.
Кроме того, новые версии системных таблиц могут создаваться в результате обновлений или изменений их схемы. Эти версии именуются с использованием числового суффикса.
Например, рассмотрим таблицы system.query_log, которые содержат строку для каждого запроса, выполненного на узле:
Выполнение запросов к нескольким версиям
Мы можем выполнять запросы к этим таблицам, используя функцию merge. Например, запрос ниже определяет последний запрос, отправленный на целевой узел, в каждой таблице query_log:
11 строк в наборе. Прошло: 0.373 сек. Обработано 6.44 миллиона строк, 25.77 МБ (17.29 миллиона строк/с, 69.17 МБ/с). Пиковое потребление памяти: 28.45 МиБ.
Запросы по узлам и версиям
Из‑за версионности системных таблиц это по‑прежнему не отражает все данные в кластере. Если совместить приведённое выше с функцией merge, мы получим точный результат для нашего диапазона дат:
3 строки в наборе. Прошло: 0.462 сек. Обработано 7.94 млн строк, 31.75 MB (17.17 млн строк/с, 68.67 MB/s.)