Build Clickhouse with DEFLATE_QPL
-
QPLの必要な 前提条件 を満たしていることを確認してください。
-
deflate_qpl は cmake ビルド中にデフォルトで有効になっています。もし誤って変更してしまった場合は、ビルドフラグを再確認してください: ENABLE_QPL=1
-
一般的な要件については、Clickhouseの一般的な ビルド指示 を参照してください。
Run Benchmark with DEFLATE_QPL
Files list
フォルダ benchmark_sample
は、qpl-cmake の下にあり、Pythonスクリプトを使ってベンチマークを実行する例を示しています。
client_scripts
には、典型的なベンチマークを実行するためのPythonスクリプトが含まれています。例えば:
client_stressing_test.py
: [1~4] サーバインスタンスでのクエリストレステストのためのPythonスクリプトです。queries_ssb.sql
: Star Schema Benchmark のためのすべてのクエリをリストしたファイルです。allin1_ssb.sh
: このシェルスクリプトは、ベンチマークワークフローを自動的にすべて実行します。
database_files
は、lz4/deflate/zstd コーデックに従ってデータベースファイルを保存することを意味します。
Run benchmark automatically for Star Schema:
完了したら、すべての結果をこのフォルダで確認してください: ./output/
失敗に遭遇した場合は、以下のセクションのように手動でベンチマークを実行してください。
Definition
[CLICKHOUSE_EXE] は、ClickHouse実行可能プログラムのパスを意味します。
Environment
- CPU: Sapphire Rapid
- OS要件は、QPLのシステム要件を参照してください。
- IAA設定は、アクセラレータ設定を参照してください。
- Pythonモジュールをインストールする:
[Self-check for IAA]
期待される出力は次のようになります:
何も出力が見えない場合は、IAAが作業の準備が整っていないことを意味します。IAA設定を再確認してください。
Generate raw data
dbgen
を使用して、以下のパラメータで1億行のデータを生成します:
-s 20
*.tbl
のようなファイルは、./benchmark_sample/rawdata_dir/ssb-dbgen
の下に出力されることが期待されます。
Database setup
LZ4コーデックでデータベースを設定します。
ここで、コンソールから Connected to ClickHouse server
というメッセージが表示されることを確認してください。これは、クライアントがサーバーとの接続を正常に設定したことを意味します。
Star Schema Benchmark に記載されている下記の3つのステップを完了してください。
- ClickHouseでのテーブル作成
- データの挿入。ここでは
./benchmark_sample/rawdata_dir/ssb-dbgen/*.tbl
を入力データとして使用する必要があります。 - "スター スキーマ"を非正規化された"フラットスキーマ"に変換
IAA Deflateコーデックでデータベースをセットアップします。
lz4と同様に3つのステップを完了してください。
ZSTDコーデックでデータベースをセットアップします。
lz4と同様に3つのステップを完了してください。
[self-check] 各コーデック(lz4/zstd/deflate)に対して、データベースが正常に作成されたことを確認するために以下のクエリを実行してください:
以下の出力が期待されます:
[Self-check for IAA Deflate codec]
クライアントからの挿入またはクエリの実行を最初に行うと、ClickHouseサーバーコンソールはこのログを出力することが期待されます:
これを見つけられないが、次のような別のログを見た場合:
それはIAAデバイスが準備できていないことを意味し、再度IAA設定を確認する必要があります。
Benchmark with single instance
- ベンチマークを開始する前に、C6を無効にし、CPU周波数のガバナーを
performance
に設定してください。
- メモリバウンドの影響を軽減するために、サーバーを1ソケットに、クライアントを別のソケットにバインドするために
numactl
を使用します。 - シングルインスタンスは、シングルサーバーがシングルクライアントに接続された状態を指します。
LZ4/Deflate/ZSTDそれぞれのベンチマークを実行します:
LZ4:
IAA deflate:
ZSTD:
期待される3つのログが出力されるはずです:
パフォーマンスメトリクスの確認方法:
QPSに焦点を当て、キーワード: QPS_Final
を検索し、統計を収集してください。
Benchmark with multi-instances
- あまりにも多くのスレッドによるメモリバウンドの影響を減らすために、マルチインスタンスでベンチマークを実行することをお勧めします。
- マルチインスタンスは、複数(2または4)のサーバーがそれぞれのクライアントに接続された状態を指します。
- 1ソケットのコアは均等に分割され、それぞれのサーバーに割り当てられる必要があります。
- マルチインスタンスでは、各コーデックのために新しいフォルダーを作成し、シングルインスタンスと同様の手順でデータセットを挿入する必要があります。
2つの違いがあります:
- クライアント側では、テーブル作成とデータ挿入中に指定されたポートでClickHouseを起動する必要があります。
- サーバー側では、ポートが指定された特定のxml構成ファイルを使用してClickHouseを起動する必要があります。マルチインスタンス用のすべてのカスタマイズされたxml構成ファイルは
./server_config
の下に提供されています。
ここでは、1ソケットあたり60コアがあり、2インスタンスを例に取ります。 最初のインスタンスのサーバーを起動します。 LZ4:
ZSTD:
IAA Deflate:
[第二インスタンスのサーバーを起動する]
LZ4:
ZSTD:
IAA Deflate:
第二インスタンスのためのテーブル作成 && データ挿入
テーブル作成:
データ挿入:
- [TBL_FILE_NAME] は、
./benchmark_sample/rawdata_dir/ssb-dbgen
下の正規表現: *.tbl で名前の付けられたファイルの名前を表します。 --port=9001
は、サーバーインスタンスに割り当てられたポートを示し、config_lz4_s2.xml/config_zstd_s2.xml/config_deflate_s2.xml にも定義されています。さらにインスタンスの場合、ポート9002/9003に置き換える必要があります。これはそれぞれs3/s4インスタンスを指します。指定しない場合、ポートはデフォルトで9000になり、最初のインスタンスで使用されています。
2インスタンスによるベンチマーキング
LZ4:
ZSTD:
IAA deflate:
ここでの最後の引数: 2
は client_stressing_test.py のインスタンス数を示します。さらに多くのインスタンスの場合、3または4に置き換える必要があります。このスクリプトは最大4インスタンスをサポートしています。
期待される3つのログが出力されるはずです:
パフォーマンスメトリクスの確認方法:
QPSに焦点を当て、キーワード: QPS_Final
を検索し、統計を収集してください。
4インスタンスのベンチマーク設定は、上記の2インスタンスと似ています。 最終報告用にレビューするには、2インスタンスのベンチマークデータを使用することをお勧めします。
Tips
新しいClickhouseサーバーを起動する前に、必ずバックグラウンドのClickhouseプロセスが実行されていないことを確認し、古いものを確認して終了させてください:
./client_scripts/queries_ssb.sql のクエリリストを公式の Star Schema Benchmark と比較すると、Q1.2/Q1.3/Q3.4 の3つのクエリが含まれていないことがわかります。これは、これらのクエリに対するCPU利用率%が非常に低いため(< 10%)、パフォーマンスの差異を示すことができないためです。