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

DEFLATE_QPLを使ってClickhouseをビルドする

  • ホストマシンがQPLの必要な前提条件を満たしていることを確認してください。

  • deflate_qplはcmakeビルド中にデフォルトで有効です。もし、誤って変更した場合は、ビルドフラグを再確認してください: ENABLE_QPL=1

  • 一般的な要件については、Clickhouseの一般的なビルド手順を参照してください。

DEFLATE_QPLを使ったベンチマークの実行

ファイルリスト

フォルダ 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 コーデックに従ってデータベースファイルを保存することを意味します。

Star Schemaの自動ベンチマーク実行:

完了後、すべての結果はこのフォルダ:./output/に保存されます。

失敗した場合は、以下のセクションに従って手動でベンチマークを実行してください。

定義

[CLICKHOUSE_EXE] は、ClickHouse実行可能プログラムのパスを意味します。

環境

[IAAの自己チェック]

期待される出力は次のようになります:

何も出力されない場合は、IAAが作動する準備ができていないことを意味します。再度IAA設定を確認してください。

生データの生成

dbgenを使用して、パラメータ-s 20で1億行のデータを生成します。

*.tblのようなファイルは、./benchmark_sample/rawdata_dir/ssb-dbgenの下に出力されることが期待されます。

データベースのセットアップ

LZ4 コーデックでデータベースをセットアップします。

ここで、コンソールに Connected to ClickHouse server のメッセージが表示されれば、クライアントがサーバーとの接続を正常にセットアップしたことを意味します。

Star Schema Benchmark に記載されている以下の3つのステップを完了してください。

  • ClickHouse内のテーブルの作成
  • データの挿入。ここでは、./benchmark_sample/rawdata_dir/ssb-dbgen/*.tblを入力データとして使用する必要があります。
  • "star schema"を非正規化された"flat schema"に変換します。

IAA Deflate コーデックでデータベースをセットアップします。

LZ4と同様に、上記の3つのステップを完了してください。

ZSTD コーデックでデータベースをセットアップします。

LZ4と同様に、上記の3つのステップを完了してください。

[自己チェック] 各コーデック(lz4/zstd/deflate)について、以下のクエリを実行してデータベースが正常に作成されたことを確認してください:

期待される出力は以下の通りです:

[IAA Deflate コーデックの自己チェック]

クライアントから挿入またはクエリを初めて実行すると、ClickHouseサーバーコンソールは次のログを表示することが期待されます:

これが見つからず、次のようなログが表示された場合:

それはIAAデバイスが準備ができていないことを意味し、再度IAA設定を確認する必要があります。

単一インスタンスでのベンチマーク

  • ベンチマークを開始する前に、C6を無効にし、CPU周波数のガバナーを performance に設定してください。
  • メモリバウンドの影響を排除するために、numactlを使用してサーバーを1つのソケットに、クライアントを別のソケットにバインドします。
  • 単一インスタンスとは、単一のクライアントに接続された単一のサーバーを意味します。

今、LZ4/Deflate/ZSTDそれぞれのベンチマークを実行します:

LZ4:

IAA Deflate:

ZSTD:

今、3つのログが期待通りに出力されるはずです:

性能指標を確認する方法:

私たちはQPSに焦点を当てています。キーワードQPS_Finalを検索し、統計を収集してください。

複数インスタンスでのベンチマーク

  • スレッドが多すぎるためにメモリの影響を減らすために、複数インスタンスでベンチマークを実行することをお勧めします。
  • 複数インスタンスとは、複数(2または4)のサーバーがそれぞれのクライアントに接続されていることを意味します。
  • 1つのソケットのコアは均等に分けられ、サーバーにそれぞれ割り当てられる必要があります。
  • 複数インスタンスの場合は、各コーデック用に新しいフォルダを作成し、単一インスタンスでの手順に従ってデータセットを挿入する必要があります。

2つの違いがあります:

  • クライアント側では、テーブルの作成とデータの挿入時に割り当てられたポートでClickHouseを起動する必要があります。
  • サーバー側では、ポートが割り当てられた特定のxml設定ファイルでClickHouseを起動する必要があります。すべてのカスタマイズされたxml設定ファイルは、./server_configに提供されています。

ここでは、ソケットあたり60コアとし、2インスタンスを例に取ります。 最初のインスタンスのサーバーを起動します。

LZ4:

ZSTD:

IAA Deflate:

[2番目のインスタンスのサーバーを起動]

LZ4:

ZSTD:

IAA Deflate:

2番目のインスタンスのためのテーブルの作成とデータの挿入

テーブルの作成:

データの挿入:

  • [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:

ここで、client_stressing_test.pyの最後の引数:2はインスタンスの数を意味します。さらに多くのインスタンスのためには、3または4という値に置き換える必要があります。このスクリプトは最大4インスタンスをサポートしています。

今、3つのログが期待通りに出力されるはずです:

性能指標を確認する方法:

私たちはQPSに焦点を当てています。キーワードQPS_Finalを検索し、統計を収集してください。

4インスタンスのベンチマークセットアップは、上記の2インスタンスと似ています。 最終報告のレビューには、2インスタンスのベンチマークデータを使用することをお勧めします。

ヒント

新しいClickhouseサーバーを起動する前に、バックグラウンドのClickhouseプロセスが動いていないことを確認してください。古いプロセスを確認し、終了させてください。

./client_scripts/queries_ssb.sql内のクエリリストを公式のStar Schema Benchmarkと比較すると、Q1.2/Q1.3/Q3.4の3つのクエリが含まれていないことがわかります。これは、これらのクエリのCPU使用率%が非常に低く< 10%であり、性能の違いを示すことができないことを意味します。