Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Optimizing ClickHouse for Intel's 280 core processors

2025年09月18日に「Hacker News」が公開したITニュース「Optimizing ClickHouse for Intel's 280 core processors」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

データ分析DBのClickHouseが、Intelの280コアCPUのような多コアプロセッサで最高の性能を発揮できるよう、内部処理が最適化された。これにより、大量データも高速に扱える。

ITニュース解説

ClickHouseは、大量のデータを非常に高速に分析できるデータベースだ。特にWebサイトのアクセスログ分析やIoTデバイスからのデータ収集など、膨大なデータをリアルタイムに近い速度で処理・分析する必要がある場面でその能力を発揮する。従来のデータベースが苦手とする「データを一列に並べて計算する(列指向データベース)」という仕組みを採用しているため、集計処理などが驚くほど速いのが特徴だ。

近年、コンピューターの心臓部であるCPUは、より多くのコアを搭載するようになってきた。Intelが開発している新しいCPUも例外ではなく、なんと280個ものコアを搭載するような、とてつもない数のコアを持つものが登場している。これらのCPUは、多くの処理を並行して実行することで、システムの全体的な性能を飛躍的に向上させることを目指している。

しかし、ClickHouseのような高性能なソフトウェアであっても、ただ単にCPUのコア数が増えれば増えるほど、比例して性能が向上するというわけではない。むしろ、コア数が増えすぎると、これまでとは異なる種類の「ボトルネック」、つまり性能の限界点にぶつかることがある。システムエンジニアを目指す上でも、ハードウェアとソフトウェアがどのように連携し、その性能を最大限に引き出すかが重要であるかを学ぶ良い機会となるだろう。

多コアCPUの課題の一つは、メモリのアクセス速度だ。CPUのコアがどれだけ高速に計算できても、計算に必要なデータがメモリから遅れて供給されれば、CPUはデータを待つ「手待ち状態」になってしまい、その高性能を十分に活かせない。データがメモリからCPUに送られる「帯域幅」が不足すると、多くのコアは遊んでしまうことになる。これは、CPUが処理能力を持て余し、データの到着を待つ時間が長くなることを意味する。

さらに、多くのコアが同じメモリ領域やキャッシュメモリにアクセスしようとすると、「キャッシュ競合」という問題が発生する。キャッシュとは、CPUが頻繁に使うデータを一時的に保存しておく非常に高速な記憶領域のことだが、多数のコアが同じデータのコピーを持とうとしたり、更新しようとしたりすると、そのデータの整合性を保つために余計なオーバーヘッドが生じ、かえって処理が遅くなることがある。

また、現代の高性能サーバーでは「NUMA(Non-Uniform Memory Access)」というアーキテクチャが一般的だ。これは、複数のCPUソケット(CPUをマザーボードに取り付ける場所)があり、それぞれのCPUソケットが自分の近くに専用のメモリを持っている状態を指す。この場合、あるCPUソケットから見て、自分の近くのメモリへのアクセスは速いが、遠くのCPUソケットに接続されたメモリへのアクセスは遅くなる。ClickHouseが、データと処理を行うコアの位置関係を意識しないままだと、遠いメモリにアクセスしようとして、無駄に時間がかかってしまう可能性があるのだ。

ClickHouseの開発チームは、これらの課題を克服するために、多大な努力を払った。彼らはまず、CPUの内部構造、特にコアがどのように配置されているか、そしてNUMAノードがどのように構成されているかをClickHouse自身が「理解」できるようにした。新しいIntel CPUには、高い性能を持つ「P-core(Performance-core)」と、電力効率に優れた「E-core(Efficiency-core)」という異なる種類のコアが搭載されている場合があり、ClickHouseはどちらのコアを使うべきかも賢く判断するように改良された。

具体的には、ClickHouseは「スレッドプール」と呼ばれる、処理を実行する作業員のグループを大幅に改善した。以前は、すべてのコアが共通の作業員グループを使っていたが、これではNUMAの問題に対応できない。そこで、ClickHouseは各NUMAノードごとに独立したスレッドプールを持つように変更した。これにより、あるNUMAノードで発生した処理は、そのNUMAノードに属するCPUコアと、そのCPUコアに近いメモリを使って実行されるようになり、遠いメモリへの無駄なアクセスを大幅に減らすことができた。これにより、データが物理的に近い場所で処理されるため、アクセス速度が向上し、全体的な効率が向上する。

さらに、ClickHouseはオペレーティングシステム(OS)がスレッドをどのようにCPUに割り当てるかについても踏み込んだ。通常、どのスレッドをどのコアで動かすかはOSの「スケジューラ」が担当するが、多数のコアを持つCPUでは、OSのデフォルトのスケジューラだけでは最適な性能を引き出せない場合がある。ClickHouseは、OSのスケジューリングポリシーを調整したり、あるいは自身でワーカースレッドを積極的に最適なCPUコアに割り当てたりする工夫を取り入れた。特に、重要な処理を行うスレッドを高い性能を持つP-coreに優先的に割り当てることで、全体の処理速度を向上させた。

メモリの割り当て方も賢くなった。データが必要になったとき、ClickHouseは要求したスレッドが属するNUMAノードからメモリを割り当てるようにした。これにより、データとそれを使うCPUコアが常に近くに存在し、前述のNUMAによるアクセス遅延を最小限に抑えることが可能になった。

他にも、ClickHouseは共有リソースへのアクセスを制御する「ロック」の仕組みを最適化したり、データがキャッシュメモリに効率よく収まるようにデータの構造を見直したり、高速なネットワークデバイス(RDMAなど)との連携を強化したりと、さまざまな側面から性能改善に取り組んだ。これらの地道な努力の積み重ねが、最終的に280コアのような超多コアCPU上でもClickHouseがその真の力を発揮できるようにしたのだ。

この最適化は、単にClickHouseの性能が向上したというだけでなく、現代のコンピューターシステムにおいて、ハードウェアの特性を深く理解し、それに応じてソフトウェアを賢く設計・調整することの重要性を示している。システムエンジニアとして、単にプログラムを書くだけでなく、そのプログラムがどのようなハードウェアの上で、どのように動作するのか、そしてそのハードウェアの特性をどう引き出すかという視点を持つことが、高性能なシステムを構築する上で不可欠だ。ソフトウェアとハードウェアが密接に連携し、互いの強みを最大限に引き出し合うことで、初めて真の高性能が実現できるのである。

関連コンテンツ