システムテーブルの概要
- サーバーの状態、プロセス、および環境
- サーバーの内部プロセス
- ClickHouseバイナリのビルド時に使用されたオプション
systemdatabase に配置されている- データの読み取り専用である
- DROP や ALTER はできないが、デタッチは可能である
/etc/clickhouse-server/config.d/ 配下にテーブルと同名の設定ファイルを作成するか、/etc/clickhouse-server/config.xml で対応する要素を設定することでカスタマイズできます。カスタマイズ可能な要素は次のとおりです。
database: システムログテーブルが属する database。このオプションは現在 非推奨 です。すべてのシステムログテーブルは databasesystem配下にあります。table: データを挿入するテーブルpartition_by: PARTITION BY 式を指定します。ttl: テーブルの 有効期限 (TTL) 式を指定します。flush_interval_milliseconds: データをディスクに flush する間隔engine: パラメーター付きの完全な engine 式 (ENGINE =で始まるもの) を指定します。このオプションはpartition_byおよびttlと 競合 します。同時に設定すると、サーバーは例外を発生させて終了します。
MergeTreeエンジンのテーブルのパーティション化機能も利用できます。
システムメトリクスの取得元
CAP_NET_ADMINケーパビリティ。- procfs (Linux のみ) 。
CAP_NET_ADMIN ケーパビリティがない場合は、ProcfsMetricsProvider へのフォールバックを試みます。ProcfsMetricsProvider では、クエリごとのシステムメトリクス (CPU および I/O) を収集できます。
システムで procfs がサポートされ、有効になっている場合、ClickHouse server は以下のメトリクスを収集します。
OSCPUVirtualTimeMicrosecondsOSCPUWaitMicrosecondsOSIOWaitMicrosecondsOSReadCharsOSWriteCharsOSReadBytesOSWriteBytes
OSIOWaitMicroseconds は、Linux カーネル 5.14.x 以降ではデフォルトで無効になっています。
sudo sysctl kernel.task_delayacct=1 を使用するか、/etc/sysctl.d/ に kernel.task_delayacct = 1 を含む .conf ファイルを作成すると有効にできますClickHouse Cloud のシステムテーブル
parts は、どのノードにクエリしても一貫している必要があります。
_log接尾辞を持つシステムテーブル。- メトリクスを公開するシステムテーブル。たとえば
metrics、asynchronous_metrics、events。 - 実行中のプロセスを公開するシステムテーブル。たとえば
processes、merges。
system.query_log テーブルを考えてみましょう。これには、そのノードで実行された各クエリについて 1 行ずつ記録されます。
複数のバージョンをまたいだクエリ
merge 関数を使うと、これらのテーブルをまたいでクエリできます。たとえば、次のクエリは、各 query_log テーブルについて、対象ノードに対して発行された最新のクエリを特定します。
並び順の判断に数値の接尾辞を使わないでくださいテーブル名の数値の接尾辞からデータの順序を推測できるように見えることがありますが、それを当てにしてはいけません。そのため、特定の日付範囲を対象にする場合は、常に
merge テーブル関数を日付フィルタと組み合わせて使用してください。ノードをまたいだクエリ
clusterAllReplicas 関数を merge 関数と組み合わせて利用できます。clusterAllReplicas 関数を使うと、“default” クラスター内のすべてのレプリカにまたがってシステムテーブルをクエリし、ノード固有のデータを 1 つの結果に集約できます。これを merge 関数と組み合わせることで、クラスター内の特定のテーブルに関するすべてのシステムデータを対象にできます。
この方法は、クラスター全体にわたる処理の監視やデバッグで特に有用で、ClickHouse Cloud デプロイメントの健全性やパフォーマンスを効果的に分析するのに役立ちます。
ClickHouse Cloud は、冗長性とフェイルオーバーのために複数のレプリカを持つクラスターを提供します。これにより、動的オートスケーリングやダウンタイムなしのアップグレードなどの機能が実現されます。特定の時点では、新しいノードがクラスターに追加されつつあったり、クラスターから削除されつつあったりする場合があります。こうしたノードをスキップするには、以下に示すように、
clusterAllReplicas を使用するクエリに SETTINGS skip_unavailable_shards = 1 を追加してください。query_log テーブルをクエリした場合の違いを見てみましょう。
ノードやバージョンをまたいだクエリ
merge関数と組み合わせることで、対象の日付範囲に対して正確な結果が得られます。