概要
Intelの最新サーバーCPUはコア数が飛躍的に増加し、ClickHouseのスケーラビリティ最適化が重要課題。 高コア環境ではロック競合やメモリ帯域、NUMA効果などがボトルネックとなる。 Intel ShanghaiのエンジニアがClickHouseの全43 ClickBenchクエリを体系的に解析し、最適化を実施。 主な改善点はロック競合解消、スレッドローカル化、メモリ再利用最適化など。 最適化により、個別クエリで最大10倍、全体で2〜10%の性能向上を実現。
Intel超高コアサーバー時代のClickHouse最適化
- Intelの最新CPU は1ソケットあたり128〜288コア、ロードマップでは200コア超も視野
- マルチソケット構成で 400コア以上 のサーバーも現実に
- Dennardスケーリング終焉 後、クロック向上よりもコア数増加が主流
- ClickHouseのような分析DB にとって高コア化は大きな機会と課題
- ハードウェア全体の 並列処理能力活用 が困難になる傾向
超高コア環境の主なボトルネック
- ロック競合 :スレッド数が増えるほど待機時間とキャッシュコヒーレンシトラフィックが急増
- キャッシュコヒーレンス :キャッシュラインのバウンスによるCPUサイクル消費
- メモリ帯域 :データ集約型システムでの有効活用が課題
- スレッド協調コスト :スレッド数増加で同期コストが超線形に増加
- NUMA効果 :ローカル・リモートメモリ間のレイテンシ/帯域差
- ロック競合解消 や メモリ最適化 が性能向上の鍵
ClickHouse最適化の実践
- Intel Xeon (Ice Lake, Sapphire Rapids, Sierra Forest, Granite Rapids)で検証
- perf, Intel VTune などのプロファイリングツールで全43 ClickBenchクエリを解析
- 5つの最適化領域 を特定し、包括的なスケーラビリティ向上策を実装
ボトルネック1:ロック競合
- 理論上、Nスレッドのロック待ちコストはN^2に増大
- 例:8→80コアでロック待ち100倍
- mutex自体のキャッシュコヒーレンストラフィックも線形増加
- クリティカルセクション短縮、排他ロックの細粒度化、共有状態排除が基本方針
クエリ条件キャッシュの最適化
- 元実装 :全操作で排他ロック、全スレッドが同時にロック待ち
- 問題点 :
- 読み込み中心なのに書き込みロック多用
- クリティカルセクションが長い
- 重複更新が多発
- 最適化手法 :
- ダブルチェックロッキング +アトミック操作で不要なロック取得を回避
- 共有ロックで事前判定、必要時のみ排他ロック
- 効果 :
- CPUサイクル消費76%→1%
- ClickBench Q10/Q11のQPSが 85%/89%向上
- 全体幾何平均で 8.1%向上
ボトルネック2:グローバルタイマーのロック競合
- クエリプロファイラ がタイマーIDの作成/削除でグローバルロック競合を誘発
- 元実装 :全スレッドで共有タイマー管理、ロック必須
- 最適化手法 :
- スレッドローカルストレージ でタイマーIDを各スレッドに分離
- ロックもシステムコールも不要に
- 効果 :
- タイマー関連のロック競合が解消
- タイマー作成/削除コストも削減
- プロファイリングのスケーラビリティ大幅向上
ボトルネック3:メモリ最適化
- 超高コア環境ではメモリアロケータ自体が競合点に
- メモリ帯域の分割、割り当てパターンの非効率化が大規模環境で顕在化
- ClickHouseの二段階ハッシュテーブル のメモリ再利用最適化が必須
- ページフォルトや常駐メモリ使用量の削減 が主目的
まとめ
- ロック競合解消、 スレッドローカル化、 メモリ再利用最適化 など多面的な最適化が超高コア時代のDB性能向上の鍵
- ClickHouse本体にマージ済み で、全世界のClickHouse導入現場で恩恵
- 個別クエリで 最大10倍、全体で 2〜10% の性能向上を達成
- 今後もコア数増加トレンド が続く中で、さらなるスケーラビリティ最適化の重要性
※続きや他の最適化領域の詳細が必要な場合はご指示ください。