メインコンテンツへスキップ
本番環境でデータベースシステムを監視することは、デプロイメントの健全性を把握し、障害を未然に防いだり迅速に解決したりするうえで不可欠です。 高度なダッシュボードは、ClickHouse システムとその実行環境を深く把握できるよう設計された軽量ツールで、パフォーマンスのボトルネック、システム障害、非効率を早期に特定するのに役立ちます。 高度なダッシュボードは、ClickHouse OSS (オープンソースソフトウェア) と Cloud の両方で利用できます。この記事では、Cloud で高度なダッシュボードを使用する方法を紹介します。

高度なダッシュボードにアクセスする

高度なダッシュボードには、以下の場所からアクセスできます。
  • 左側のパネル
    • 監視高度なダッシュボード

ネイティブの高度なダッシュボードにアクセスする

ネイティブの高度なダッシュボードには、次の場所からアクセスできます。
  • 左側のパネル
    • MonitoringAdvanced dashboard
    • You can still access the native advanced dashboard. をクリック
これにより、ネイティブの高度なダッシュボードが新しいタブで開きます。ダッシュボードにアクセスするには、認証が必要です。 各可視化には、その内容を表示するための SQL クエリが関連付けられています。ペンアイコンをクリックすると、このクエリを編集できます。

標準で用意されている可視化

高度なダッシュボードの既定のチャートは、ClickHouse システムの状況をリアルタイムで 可視化できるように設計されています。以下に、各チャートの説明を一覧で示します。 目的のチャートを見つけやすいよう、3 つのカテゴリに分けています。

ClickHouse 固有

これらのメトリクスは、ClickHouse インスタンスの健全性とパフォーマンスを 監視するために調整されています。
メトリクス説明
1秒あたりのクエリ数処理されているクエリのレートを追跡します
1秒あたりの読み取り行数クエリで読み取られている行数を示します
1秒あたりの挿入行数データのインジェスト率を測定します
MergeTree パーツ総数MergeTree テーブル内のアクティブなパーツ数を表示し、バッチ化されていない挿入の特定に役立ちます
パーティションごとの最大パーツ数いずれかのパーティションに存在するパーツ数の最大値を示します
実行中のクエリ数現在実行中のクエリ数を表示します
1秒あたりの読み取りバイト数クエリで読み取られているデータ量を示します

システムヘルス固有

ClickHouse 自体だけでなく、基盤となるシステムを監視することも同様に重要です。
MetricDescription
IO WaitI/O 待機時間を追跡します
CPU WaitCPU リソースの競合による遅延を測定します
Read From Diskディスクまたはブロックデバイスから読み取られたバイト数を追跡します
Read From Filesystemページキャッシュを含むファイルシステムから読み取られたバイト数を追跡します
Memory (tracked, bytes)ClickHouse が追跡しているプロセスのメモリ使用量を表示します
Load Average (15 minutes)システムの現在の 15 分平均負荷を表示します
OS CPU Usage (Userspace)ユーザー空間のコード実行時の CPU 使用率
OS CPU Usage (Kernel)カーネルコード実行時の CPU 使用率

ClickHouse Cloud 固有

ClickHouse Cloud はオブジェクトストレージ (S3 タイプ) を使用してデータを保存します。このインターフェイスを監視することで、 問題の検出に役立ちます。
MetricDescription
S3 Read waitS3 への読み取りリクエストのレイテンシを測定します
S3 read errors per second読み取りエラー率を追跡します
Read From S3 (bytes/sec)S3 ストレージから読み取られるデータ量の速度を追跡します
Disk S3 write req/secS3 ストレージへの書き込み処理の頻度を監視します
Disk S3 read req/secS3 ストレージからの読み取り処理の頻度を監視します
Page cache hit rateページキャッシュのヒット率
Filesystem cache hit rateファイルシステムキャッシュのヒット率
Filesystem cache sizeファイルシステムキャッシュの現在のサイズ
Network send bytes/sec受信ネットワークトラフィックの現在の速度を追跡します
Network receive bytes/sec送信ネットワークトラフィックの現在の速度を追跡します
Concurrent network connections現在の同時実行ネットワーク接続数を追跡します

高度なダッシュボードを使用した問題の特定

ClickHouseサービスの健全性をリアルタイムで把握できることで、 ビジネスに影響が及ぶ前に問題を軽減したり、発生した問題の解決に大いに役立ちます。以下は、 高度なダッシュボードを使って見つけられる問題の例です。

非バッチ挿入

ベストプラクティスのドキュメントで説明されているとおり、同期的に実行できる場合は、常に ClickHouse にデータを一括挿入することが推奨されます。 適切なバッチサイズで一括挿入を行うと、 インジェスト中に作成されるパーツ数が減り、その結果、ディスクへの書き込み効率が向上し、merge 操作も少なくなります。 十分に最適化されていない挿入を見つけるための主要なメトリクスは、Inserted Rows/secMax Parts for Partition です。 上の例では、13h から 14h の間に Inserted Rows/secMax Parts for Partition の 2 つのスパイクが見られます。これは、妥当な速度でデータを取り込んでいることを示しています。 その後、16h 以降に Max Parts for Partition で再び大きなスパイクが見られる一方で、 Inserted Rows/sec は非常に低いままです。生成されるデータ量がごく少ないにもかかわらず、多くのパーツが 作成されており、これはパーツサイズが 最適ではないことを示しています。

リソース負荷の高いクエリ

CPU やメモリなど、多くのリソースを消費する SQL クエリを実行することは珍しくありません。ただし、こうしたクエリを監視し、デプロイメント全体のパフォーマンスへの影響を把握することが重要です。 クエリのスループットに変化がないにもかかわらずリソース消費量が急変した場合、より高負荷なクエリが実行されている可能性があります。実行しているクエリの種類によっては想定内の挙動ですが、高度なダッシュボードでそれを見つけられるのは有用です。 以下は、1 秒あたりの実行クエリ数に大きな変化がないまま、CPU 使用率が急上昇している例です。

不適切な主キー設計

高度なダッシュボードを使うと、不適切な主キー設計も見つけられます。 “A practical introduction to primary indexes in ClickHouse” で説明されているように、 ユースケースに最も適した主キーを選ぶことで、 クエリ実行時に ClickHouse が読み取る必要のある行数を減らし、パフォーマンスを大幅に向上できます。 主キーの改善余地を見つけるために確認できるメトリクスの 1 つが Selected Rows per second です。選択された行数が急増している場合、 クエリ全体のスループットが増加している可能性と、 実行時に大量の行を選択するクエリがある可能性の両方が考えられます。 system.query_log テーブルでは、タイムスタンプをフィルターとして使うことで、 ピーク時に実行されたクエリを特定できます。 たとえば、ある日の午前 11 時から午前 11 時までに実行されたすべてのクエリを表示するクエリを実行して、 どのクエリが過剰に多くの行を読み取っているかを確認します:
Query
SELECT
    type,
    event_time,
    query_duration_ms,
    query,
    read_rows,
    tables
FROM system.query_log
WHERE has(databases, 'default') AND (event_time >= '2024-12-23 11:20:00') AND (event_time <= '2024-12-23 11:30:00') AND (type = 'QueryFinish')
ORDER BY query_duration_ms DESC
LIMIT 5
FORMAT VERTICAL
Response
Row 1:
──────
type:              QueryFinish
event_time:        2024-12-23 11:22:55
query_duration_ms: 37407
query:             SELECT
    toStartOfMonth(review_date) AS month,
    any(product_title),
    avg(star_rating) AS avg_stars
FROM amazon_reviews_no_pk
WHERE
    product_category = 'Home'
GROUP BY
    month,
    product_id
ORDER BY
    month DESC,
    product_id ASC
LIMIT 20
read_rows:         150957260
tables:            ['default.amazon_reviews_no_pk']

Row 2:
──────
type:              QueryFinish
event_time:        2024-12-23 11:26:50
query_duration_ms: 7325
query:             SELECT
    toStartOfMonth(review_date) AS month,
    any(product_title),
    avg(star_rating) AS avg_stars
FROM amazon_reviews_no_pk
WHERE
    product_category = 'Home'
GROUP BY
    month,
    product_id
ORDER BY
    month DESC,
    product_id ASC
LIMIT 20
read_rows:         150957260
tables:            ['default.amazon_reviews_no_pk']

Row 3:
──────
type:              QueryFinish
event_time:        2024-12-23 11:24:10
query_duration_ms: 3270
query:             SELECT
    toStartOfMonth(review_date) AS month,
    any(product_title),
    avg(star_rating) AS avg_stars
FROM amazon_reviews_pk
WHERE
    product_category = 'Home'
GROUP BY
    month,
    product_id
ORDER BY
    month DESC,
    product_id ASC
LIMIT 20
read_rows:         6242304
tables:            ['default.amazon_reviews_pk']

Row 4:
──────
type:              QueryFinish
event_time:        2024-12-23 11:28:10
query_duration_ms: 2786
query:             SELECT
    toStartOfMonth(review_date) AS month,
    any(product_title),
    avg(star_rating) AS avg_stars
FROM amazon_reviews_pk
WHERE
    product_category = 'Home'
GROUP BY
    month,
    product_id
ORDER BY
    month DESC,
    product_id ASC
LIMIT 20
read_rows:         6242304
tables:            ['default.amazon_reviews_pk']
この例では、同じクエリが 2 つの テーブル amazon_reviews_no_pkamazon_reviews_pk に対して実行されていることがわかります。ここから、 誰かがテーブル amazon_reviews の主キー設定をテストしていたと考えられます。
最終更新日 2026年6月10日