2

あるテーブルから別のテーブルに約2,000万行を選択的に(行と列の両方で)エクスポートする必要があります。これは私が試したものです:

--Run this in batch:
INSERT INTO Table 2
Select A, B from Table1 
where A > a and B < b

---Table1 have columns A, B....Z and got around 50 million records. 

完了するまでに約12時間かかります。sybaseでは、Table1から選択した列と行を使用してbcpを出力し、Table2にbcpを入力することはできないと思います。使用できる代替の高速アプローチはありますか?4時間以内にできれば幸いです。

読んでくれてありがとう。

4

1 に答える 1

1

私はあなたが意味すると思います:

WHERE PK > start_value AND PK < end_value

同じサーバー上の 2 つのテーブルのデータを複製する正当な理由はないため、テーブルが別のサーバーにあることを願っています。「アーカイブ」している場合は、注意してください。それは間違ったことです。代わりにテーブル速度を上げてください。この投稿を参照してください。

  1. そのINSERT-SELECTはトランザクションログを強制終了し、実行が徐々に遅くなり、他のユーザーがデータベースを使用できなくなります。1000 行のバッチに分割すると、より速く、より社交的になります。

4時間以内にできたら嬉しいです

  1. 問題ないはずです。ハードウェアとディスク レイアウトによって異なります。ASE 15.5 を実行している小さなデモ ボックスでは、13.2 秒で 1600 万行をロードできます。

  2. bcp は、次の条件に応じて、2 つのモードで自動的に実行されます。

    • 速い。これには、SELECT_INTO/BULK_COPY sp_dboption を設定する必要があります。これにより、bcp は INSERTS をログに記録せず、割り当てのみをログに記録できます。また、テーブルのインデックスを削除する必要があります (bcp の終了後に作成できます)。

    • スロー。上記の条件のいずれかが満たされていない。すべての INSERTS がログに記録されます。ログにそれをダンプするしきい値があることを確認します (いっぱいになります)。

  3. out_data_file または Table_2 が Table_1 の列のサブセットであってもまったく問題ありません。Table_1 サーバーに Table_2 のビューを作成します。ビューを Bcp アウトします。ビューに WHERE 句を配置したり、変換を行ったりすることもできます。

  4. bcp を並行して実行できます (ホスト システムにある CPU/コアの数まで)。抽出を並列ストリームの数に分割します (例: 8 コア マシンでは、8 つの抽出ジョブを並列で実行します)。-F および -L パラメーターを使用して、Table_1 の 8 分の 1 を指定します。o/s がある場合は「&」を使用し、ない場合は 8 x BAT ファイルを使用します。

  5. (例) 8 x INSERT-SELECT ジョブを並行して実行することもできます。行番号ではなく、PK 値で分割します。

于 2010-11-01T10:05:14.877 に答える