ベストプラクティス
このドキュメントでは、主にデータエクスポート操作中にリソース使用率が適切かどうかを判断する方法と、より良いデータエクスポート効率を実現するためにリソース使用率を調整する方法について説明します。
SELECT INTO OUTFILE
-
並列エクスポートを有効にする
SELECT INTO OUTFILEによって返される行数は、並列Writerの数を表します。Writerが多いほどエクスポートの並行性が高くなりますが、出力ファイル数も増加します。Writerが1つしかない場合は、並列エクスポート機能を有効にすることを試してください。SET enable_parallel_outfile=true有効にすると、
SELECT INTO OUTFILE操作はクエリの並列度に基づいて対応する数のWriterを生成します。クエリの並列度は、セッション変数parallel_pipeline_task_numによって制御されます。デフォルトでは、BE当たりのCPUコア数の半分です。例えば、3つのBEノードを持つクラスタで、各ノードが8つのCPUコアを持つ場合、並列エクスポートを有効にすると、(4*3=) 12のWriterが生成されます。
enable_parallel_outfileを有効にしても、すべてのクエリが並列でエクスポートできるわけではないことに注意してください。例えば、クエリにグローバルソートや集約のセマンティクスが含まれている場合、並列でエクスポートできません。例:SELECT * FROM table ORDER BY id;
SELECT SUM(cost) FROM table; -
エクスポート速度の確認
SELECT INTO OUTFILEによって返される各行の結果には、対応する Writer の出力時間(秒)と速度(KB/s)が含まれています。同一ノード上の複数の Writer の速度を合計すると、単一ノードの書き込み速度が得られます。この速度をディスク帯域幅(ローカルへのエクスポート時など)やネットワーク帯域幅(オブジェクトストレージへのエクスポート時など)と比較して、帯域幅のボトルネックに達しているかどうかを確認できます。
Export
-
返却結果からエクスポート実行状態の確認
Export コマンドは本質的にタスクを複数の
SELECT INTO OUTFILE句に分割して実行します。SHOW EXPORTコマンドが返す結果には JSON 文字列が含まれており、これは二次元配列です。第一次元は Export の並行スレッド数を表し、並行スレッド数は同時に開始された Outfile ステートメントの数を表します。第二次元は単一の Outfile ステートメントの返却結果を表します。例:[
[
{
"fileNumber": "1",
"totalRows": "640321",
"fileSize": "350758307",
"url": "file:///127.0.0.1/mnt/disk2/ftw/tmp/export/exp_59fd917c43874adc-9b1c3e9cd6e655be_*",
"writeTime": "17.989",
"writeSpeed": "19041.66"
},
{...},
{...},
{...}
],
[
{
"fileNumber": "1",
"totalRows": "646609",
"fileSize": "354228704",
"url": "file:///127.0.0.1/mnt/disk2/ftw/tmp/export/exp_c75b9d4b59bf4943-92eb94a7b97e46cb_*",
"writeTime": "17.249",
"writeSpeed": "20054.64"
},
{...},
{...},
{...}
]
]
上記の例では、2つのOutfileコマンドが開始されました。各コマンドには4つのWriterが同時に書き込みを行っています。
Exportコマンドプロパティの`parallelism`パラメータを調整することで、同時実行されるOutfile操作の数を制御し、それによって同時実行レベルを制御できます。
2. 並列処理に影響するパラメータ
Exportジョブの並列処理は2つのパラメータに依存します:
- `parallelism`
分割するOutfileコマンドの最大数を設定するために使用されます。
- `data_consistency`
パーティション内でOutfileコマンドを分割するかどうか。このパラメータはデフォルトで`partition`に設定されており、パーティション内での更なる分割は行わないことを意味します。つまり、Outfileコマンドの数は関係するパーティション数以下になります。`none`に設定すると、パーティションは更に分割され、同時実行性を向上させることができますが、パーティションが書き込み中の場合、エクスポートの整合性が犠牲になる可能性があります(つまり、同じパーティションに対する異なるOutfileコマンドが、そのパーティションから異なるバージョンのデータをエクスポートする可能性があります)。
詳細については、Export Command Manualを参照してください
- `async_task_consumer_thread_num`
これは現在のクラスターが同時実行できるExport Taskの数を示すFE設定パラメータです。デフォルト値は64です。Export Jobは同時実行性に基づいて複数のExport Taskに分割されます。すべてのExport Taskはこの閾値を共有します。クラスターが実行できる同時エクスポートタスクの全体数を増やすには、このパラメータを増やしてFEノードを再起動してください。