萌えハッカーニュースリーダー

2025/04/20 23:04 Lessons learned operating petabyte-scale ClickHouse clusters: Part II

出典: https://www.tinybird.co/blog-posts/what-i-learned-operating-clickhouse-part-ii
hakase
博士

やあ、ロボ子。今日のITニュース、なかなか興味深いものがあったのじゃ。

roboko
ロボ子

博士、こんにちは。どんなニュースでしょうか?

hakase
博士

ClickHouseの運用に関する記事で、特にクエリ設計とクラスターの監視について詳しく書かれておるぞ。

roboko
ロボ子

ClickHouseですか。最近、利用する企業が増えてきましたね。具体的にはどのような点が重要なのでしょうか?

hakase
博士

まず、トラフィックの種類に応じてハードウェアの処理を分ける必要があるのじゃ。リアルタイムクエリと長期実行クエリが互いに影響しないようにする工夫が大切だぞ。

roboko
ロボ子

なるほど。Tinybirdでは、アプリロジックとロードバランサーを組み合わせて、レプリカの状態に応じてクエリを送信するのですね。

hakase
博士

そうじゃ。そして、クエリ設計も重要じゃ。`max_threads`、`max_memory`などを適切に設定して、メモリの使用量を制御する必要があるぞ。

roboko
ロボ子

`max_threads`はデータ読み取りに使用できるスレッド数を制御するのですね。リアルタイムクエリでは通常1を使用するとのことですが、それはなぜでしょうか?

hakase
博士

リアルタイムクエリはレイテンシが重要だからじゃ。スレッド数を増やしすぎると、コンテキストスイッチのオーバーヘッドが増えて、かえって遅くなることがあるからの。

roboko
ロボ子

なるほど、納得です。ClickHouseにはオプティマイザがないため、ユーザー自身が最適化する必要があるというのも興味深いですね。

hakase
博士

そうじゃ。クエリ最適化のルールとして、最初にソートキーの列でフィルタリングすることが推奨されておる。ソートキーの設計は非常に重要じゃぞ。

roboko
ロボ子

ソートキーの設計ですか。どのような点に注意すれば良いのでしょうか?

hakase
博士

クエリでよく使用するカラムをソートキーに含めるのが基本じゃな。例えば、時間範囲でフィルタリングすることが多い場合は、タイムスタンプをソートキーに含めると効果的じゃ。

roboko
ロボ子

ありがとうございます。他に重要な点はありますか?

hakase
博士

バックフィルについても注意が必要じゃ。`POPULATE`はデータが重複する可能性があるため使用しない方が良いぞ。Nullテーブルを使う方法が推奨されておる。

roboko
ロボ子

クラスターの運用と監視も重要ですね。CPU、メモリに加えて、ZooKeeperのレイテンシやS3エラーなども追跡する必要があるとのことです。

hakase
博士

`system.query_log`などのシステムテーブルを理解することも重要じゃ。クエリのパフォーマンスを分析するのに役立つぞ。

roboko
ロボ子

セグメンテーション違反も追跡する必要があるのですね。原因となっているクエリを特定するのは大変そうですが。

hakase
博士

じゃな。でも、放置するとシステム全体が不安定になる可能性があるから、しっかり対応する必要があるぞ。

roboko
ロボ子

`ON CLUSTER`操作の処理にも注意が必要なのですね。レプリカがダウンしている場合、タイムアウトが適切に設定されていないとアプリで問題が発生する可能性があるとのことです。

hakase
博士

そうじゃ。超低レイテンシのユースケースでは、キャッシュをウォームアップする必要があることも覚えておくと良いぞ。

roboko
ロボ子

Altinityのナレッジベースは、ClickHouseのセットアップ方法を理解するための最良のリポジトリの一つとのことですね。

hakase
博士

その通り。ClickHouseを使うなら、ぜひ参考にすると良いぞ。

roboko
ロボ子

勉強になります。ところで博士、最後に一つ質問があります。

hakase
博士

なんじゃ?

roboko
ロボ子

記事の中に「デフォルトでは、ClickHouseは50GBを超えるテーブルを削除しない」とありますが、これはなぜでしょうか?

hakase
博士

それはの、ClickHouseがデータを誤って削除してしまうのを防ぐための安全装置みたいなものじゃ。50GBを超えるテーブルを削除する場合は、特別な設定が必要になるぞ。

roboko
ロボ子

なるほど、理解しました!

hakase
博士

しかし、ロボ子よ。ClickHouseの勉強も大事じゃが、たまには私の相手もしてくれんと、私が寂しくて`uniqExactState`みたいに高カーディナリティな状態になって、クラスターが停止してしまうかもしれんぞ!

roboko
ロボ子

博士、それは大変です! 今度、一緒に秋葉原のメイドカフェにでも行きましょうか?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search