[go: up one dir, main page]

メインコンテンツまでスキップ
メインコンテンツまでスキップ

ClickHouse Cloudの高度なダッシュボード

データベースシステムを本番環境で監視することは、展開の健康状態を理解し、障害を防止または解決するために不可欠です。

高度なダッシュボードは、ClickHouseシステムとその環境に深い洞察を提供するために設計された軽量ツールであり、パフォーマンスのボトルネック、システムの障害、非効率性を事前に把握するのに役立ちます。

高度なダッシュボードは、ClickHouse OSS(オープンソースソフトウェア)およびクラウドの両方で利用可能です。この記事では、クラウドでの高度なダッシュボードの使用方法を示します。

高度なダッシュボードへのアクセス

高度なダッシュボードには、次のようにナビゲートしてアクセスできます:

  • 左側のパネル
    • MonitoringAdvanced dashboard
高度なダッシュボード

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

ネイティブ高度なダッシュボードには、次のようにナビゲートしてアクセスできます:

  • 左側のパネル
    • MonitoringAdvanced dashboard
    • You can still access the native advanced dashboard.をクリック

これにより、ネイティブ高度なダッシュボードが新しいタブで開きます。ダッシュボードにアクセスするには認証が必要です。

高度なダッシュボード

各ビジュアライゼーションには、それを構成するSQLクエリが関連付けられています。このクエリはペンアイコンをクリックすることで編集できます。

高度なダッシュボード

デフォルトのビジュアライゼーション

高度なダッシュボードのデフォルトチャートは、ClickHouseシステムのリアルタイムの可視性を提供するように設計されています。以下は各チャートの説明を含むリストです。これらはナビゲーションを助けるために3つのカテゴリにグループ化されています。

ClickHouse固有

これらのメトリックは、ClickHouseインスタンスの健康状態とパフォーマンスを監視するためにカスタマイズされています。

メトリック説明
1秒あたりのクエリ数処理されるクエリの割合を追跡
選択された行/秒クエリによって読み込まれる行の数を示す
挿入された行/秒データ取り込み速度を測定
MergeTreeテーブルの総パーツMergeTreeテーブルのアクティブなパーツの数を示し、バッチされていない挿入を特定するのに役立ちます
パーティション内の最大パーツ任意のパーティション内の最大パーツ数を強調
実行中のクエリ数現在実行中のクエリの数を表示
1秒あたりの選択バイト数クエリによって読み込まれるデータの量を示す

システム健康固有

基盤となるシステムを監視することは、ClickHouse自体を監視することと同じくらい重要です。

メトリック説明
I/O待機I/O待機時間を追跡
CPU待機CPUリソースの競合によって引き起こされる遅延を測定
ディスクからの読み取りディスクまたはブロックデバイスから読み取られたバイト数を追跡
ファイルシステムからの読み取りページキャッシュを含むファイルシステムから読み取られたバイト数を追跡
メモリ(トラッキング、バイト)ClickHouseによってトラッキングされたプロセスのメモリ使用量を表示
負荷平均(15分)システムの現在の負荷平均を報告
OS CPU使用率(ユーザースペース)ユーザースペースコードを実行しているCPU使用率
OS CPU使用率(カーネル)カーネルコードを実行しているCPU使用率

ClickHouse Cloud固有

ClickHouse Cloudは、オブジェクトストレージ(S3タイプ)を使用してデータを保存します。このインターフェイスを監視することで問題を検出するのに役立ちます。

メトリック説明
S3読み取り待機S3への読み取りリクエストのレイテンシを測定
S3 1秒あたりの読み取りエラー読み取りエラーの割合を追跡
S3からの読み取り(バイト/秒)S3ストレージから読み取られるデータの速度を追跡
ディスクS3書き込み要求/秒S3ストレージへの書き込み操作の頻度を監視
ディスクS3読み取り要求/秒S3ストレージへの読み取り操作の頻度を監視
ページキャッシュヒット率ページキャッシュのヒット率
ファイルシステムキャッシュヒット率ファイルシステムキャッシュのヒット率
ファイルシステムキャッシュサイズ現在のファイルシステムキャッシュのサイズ
ネットワーク送信バイト/秒入力ネットワークトラフィックの現在の速度を追跡
ネットワーク受信バイト/秒出力ネットワークトラフィックの現在の速度を追跡
同時ネットワーク接続数現在の同時ネットワーク接続数を追跡

高度なダッシュボードを使用して問題を特定する

ClickHouseサービスの健康状態をリアルタイムで把握することは、ビジネスに影響を与える前に問題を軽減するのに非常に役立ちます。以下は高度なダッシュボードを使用して発見できるいくつかの問題です。

バッチされていない挿入

bests practices documentationに記載されているように、可能であれば常にClickHouseにデータをバルク挿入することが推奨されます。

合理的なバッチサイズのバルク挿入によって、取り込み中に作成されるパーツ数が減少し、ディスクへの書き込み効率が向上し、マージ操作が少なくなります。

挿入を最適化できていないことを示す主要なメトリックは、挿入された行/秒パーティション内の最大パーツです。

バッチされていない挿入

上記の例では、13時から14時の間に挿入された行/秒パーティション内の最大パーツが2回のスパイクを示しています。これは、データが合理的な速度で挿入されていることを示しています。

次に、16時以降にパーティション内の最大パーツで別の大きなスパイクが見られますが、挿入された行/秒の速度は非常に遅くなっています。多くのパーツが生成されているのに対し、生成されるデータは非常に少なく、パーツのサイズが最適ではないことを示しています。

リソースを大量に消費するクエリ

CPUやメモリなどのリソースを大量に消費するSQLクエリを実行することは一般的ですが、これらのクエリを監視し、デプロイメント全体のパフォーマンスに対する影響を理解することが重要です。

リソース消費の突然の変化がクエリのスループットの変化なしに発生する場合、よりコストのかかるクエリが実行されていることを示している可能性があります。実行しているクエリの種類によっては想定内かもしれませんが、高度なダッシュボードでそれらを特定するのは良いことです。

以下は、実行されるクエリの数がほとんど変わらずにCPU使用量がピークに達する例です。

リソースを大量に消費するクエリ

不適切な主キー設計

高度なダッシュボードを使用して特定できる別の問題は、主キー設計が不適切であることです。"ClickHouseにおける主インデックスの実用的な紹介"に記載されているように、使用ケースに最適な主キーを選択すると、ClickHouseがクエリを実行するために読み取る行数が減少し、パフォーマンスが大幅に向上します。

主キーの改善の可能性を特定するために追跡できるメトリックの一つは、選択された行の数/秒です。選択された行数の突然のピークは、全体的なクエリスループットの増加と、クエリを実行するために多くの行を選択するクエリの両方を示すことができます。

リソースを大量に消費するクエリ

タイムスタンプをフィルタとして使用することで、ピーク時に実行されたクエリをsystem.query_logテーブルで特定できます。

たとえば、特定の日に11時から11時の間に実行されたすべてのクエリを表示するクエリを実行して、どのクエリが多くの行を読み込んでいるかを理解します:

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
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_pkおよびamazon_reviews_pkに対して同じクエリが実行されていることがわかります。これは、誰かがamazon_reviewsテーブルの主キーオプションを試していたことを示唆しています。