Обзор системных таблиц
Обзор системных таблиц
Системные таблицы предоставляют информацию о:
- Состояниях сервера, процессах и окружении.
- Внутренних процессах сервера.
- Опциях, используемых при сборке бинарного файла 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 собирает эти метрики:
OSCPUVirtualTimeMicroseconds
OSCPUWaitMicroseconds
OSIOWaitMicroseconds
OSReadChars
OSWriteChars
OSReadBytes
OSWriteBytes
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
:
Хотя числовой суффикс на таблицах может предлагать порядок данных, на него никогда нельзя полагаться. По этой причине всегда используйте функцию таблицы merge в сочетании с фильтром даты, когда нацелены на определенные диапазоны дат.
Важно отметить, что эти таблицы все еще локальны для каждого узла.
Запрос между узлами
Чтобы получить полный обзор всего кластера, пользователи могут использовать функцию clusterAllReplicas
в сочетании с функцией merge
. Функция clusterAllReplicas
позволяет выполнять запросы к системным таблицам на всех репликах в кластере "default", объединяя данные, специфичные для узла, в единственный результат. В сочетании с функцией merge
это может использоваться для нацеливания на все системные данные для определенной таблицы в кластере.
Этот подход особенно ценен для мониторинга и отладки операций на уровне кластера, обеспечивая пользователям возможность эффективно анализировать состояние и производительность их развертывания ClickHouse Cloud.
ClickHouse Cloud предоставляет кластеры с несколькими репликами для резервирования и автоматического переключения. Это позволяет его функциям, таким как динамическое автоматическое масштабирование и обновления без простоя. В определенный момент времени новые узлы могут быть добавлены или удалены из кластера. Чтобы пропустить эти узлы, добавьте SETTINGS skip_unavailable_shards = 1
к запросам с использованием clusterAllReplicas
, как показано ниже.
Например, рассмотрим разницу при запросе таблицы query_log
- часто важной для анализа.
Запрос между узлами и версиями
Из-за версионирования системных таблиц это все еще не отражает полные данные в кластере. Объединив вышеуказанное с функцией merge
, мы получаем точный результат для нашего диапазона дат: