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 Data 、SQL 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%増加した。
もし大きなインデックスを作成するとき、エラーメッセージが発生したら、オンラインオプションを使用して再度実行してください。