SQL Azureへのデータ転送を高速に行う

Loading Data to SQL Azure the Fast Way – SQL Azure Team Blogを簡単に翻訳したエントリーです。

Lubor KollarとGeorge VargheseはSQL Azureへデータを転送する時に、いくつかのツールを使用したときのパフォーマンス情報を公開している。
Loading data to SQL Azure the fast way – SQLCAT Blogsを読んでみると良い。

=====

以下、ブログの一部分を抜粋して紹介する。詳細を知りたい場合は、元記事を参照してほしい。

データを転送するツールとして、SQL Server BCP Utility, SQL Server Integration Services (SSIS), Import and Export DataSQL Server Management Studio (SSMS)が提供されている。この投稿では、どのツールを使用すると速いのかを調べた結果を紹介する。

下のグラフは、一つのクラスター化インデックスを持つSQL Azureテーブルに1GBのデータを転送したときにかかった時間を表している。

使用したツールと転送データのある場所でグルーピングしている。それぞれのグラフは、シングルストリームとマルチストリームを比較している。

この結果から、Windows AzureからSQL Azureへデータを転送したときが最も速いことがわかった。multiple streamを使用したとき明らかにどのツールでもパフォーマンスが改善することが分かった。multiple streamは、Windows Azure内外関係なく効果がある。

BCPはバッチサイズ(1トランザクションでコミットする行数)とパケットサイズ(インターネット越しに1パケット辺りで送信するバイト数)を設定することができる。データの特徴とネットワークの状況に応じたパラメータ設定が必要で、パフォーマンスはパラメータ設定に大きく影響を受ける。

MSコーポレートFirewall配下のNWでは・・・・

Tool

Observation

BCP

ベストパフォーマンス;5ストリーム、バッチサイズ10,000、パケットサイズ4K、

SSIS

ベストパフォーマンス;7ストリームUse bulk upload when possible チェックボックスを選択し、ADO .NET destination SQL Azure componentをし余殃する。

 

まとめ

 

SQL Azureにデータを転送するとき、複数ストリームを使用して並列転送を行うのが良い。

BCPは、それぞれの環境に合わせて適切なパラメータ設定をする。

SQL Azureにデータ転送をした後、非クラスター化インデックスを追加する。

データ転送前にインデックスを追加すると最終的なデータベースサイズが50%増加し、同じデータを転送するのにかかる時間が170%増加した。

もし大きなインデックスを作成するとき、エラーメッセージが発生したら、オンラインオプションを使用して再度実行してください。