メインコンテンツまでスキップ
バージョン: 26.x

ベストプラクティス

このドキュメントでは主に、データエクスポート操作中にリソース使用率が適切かどうかを判断する方法、およびより良いデータエクスポート効率を実現するためにリソース使用率を調整する方法について紹介します。

SELECT INTO OUTFILE

  1. 並列エクスポートを有効にする

    SELECT INTO OUTFILEによって返される行数は、並列Writerの数を表します。Writerが多いほど、エクスポートの並行性は高くなりますが、出力ファイル数も増加します。Writerが1つしかないことがわかった場合は、並列エクスポート機能を有効にしてみてください。

    SET enable_parallel_outfile=true

    有効にすると、SELECT INTO OUTFILE操作はクエリの並列度に基づいて対応する数のWriterを生成します。クエリの並列度はセッション変数parallel_pipeline_task_numによって制御されます。デフォルトでは、BE当たりのCPUコア数の半分です。

    例えば、各ノードが8個のCPUコアを持つ3つのBEノードを持つクラスターでは、並列エクスポートが有効になると、(4*3=) 12個のWriterが生成されます。

    enable_parallel_outfileが有効になっていても、すべてのクエリが並列でエクスポートできるわけではないことに注意してください。例えば、クエリにグローバルソートや集約セマンティクスが含まれている場合、並列でエクスポートすることはできません。例えば:

    SELECT * FROM table ORDER BY id;

    SELECT SUM(cost) FROM table;
  2. エクスポート速度の決定

    SELECT INTO OUTFILEによって返される各行の結果には、対応するWriterの出力の時間(秒)と速度(KB/s)が含まれています。

    同じノード上の複数のWriterの速度を合計すると、単一ノードの書き込み速度が得られます。この速度をディスク帯域幅(例:ローカルへのエクスポート時)やネットワーク帯域幅(例:オブジェクトストレージへのエクスポート時)と比較して、帯域幅のボトルネックに達しているかどうかを確認できます。

Export

  1. 戻り結果からエクスポート実行状態を確認する

    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](../../sql-manual/sql-statements/data-modification/load-and-export/EXPORT.md)を参照してください。

- `async_task_consumer_thread_num`

これは、現在のクラスターが同時実行できるExport Taskの数を示すFE設定パラメータです。デフォルト値は64です。Export Jobは同時実行性に基づいて複数のExport Taskに分割されます。すべてのExport Taskはこの閾値を共有します。クラスターが実行できる同時実行エクスポートタスクの全体数を増やすには、このパラメータを増やしてFEノードを再起動してください。
このページでは