私は、オンプレミスアプリケーションをAzureに移動する必要があるプロジェクトで作業しています。我々は約150,000レコードをWebアプリケーション(MVC App)に転送するアップロードユーティリティを持っています。残念ながら、Azureに移行した後、タイムアウトの問題が発生していました。 SqlCommand
の代わりにSqlBulkCopy
とストアプロシージャを使用するなどいくつかの変更を行いました。今、タイムアウトの問題は解決されましたが、Azureのテーブルに15万レコードをアップロードするには、データのアップロードに約5分かかります。AzureのSQLバルクコピー速度を向上
私はAzureで試用版を使用していますが、私のデータベースDTUは20です。今はコストのために20にしておきたいと思います。私は私が働いている小さな予算を持っています。データベースサイズは問題ではありません。私はクォータのかなり下です。
どのようにこれらの150,000レコードを挿入する時間を短縮することができますか?
コードサンプルFYI
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection))
{
bulkCopy.BulkCopyTimeout = 0;
bulkCopy.BatchSize = 10000;
bulkCopy.ColumnMappings.Add("Barcode", "Barcode");
bulkCopy.ColumnMappings.Add("SubCategory", "SubCategory");
bulkCopy.ColumnMappings.Add("ItemDescription", "ItemDescription");
bulkCopy.ColumnMappings.Add("CreateDate", "CreateDate");
bulkCopy.ColumnMappings.Add("RevisedDate", "RevisedDate");
bulkCopy.DestinationTableName = "Items";
try
{
bulkCopy.WriteToServer(dtTblData);
destinationConnection.Close();
}
catch (Exception ex)
{
this.Logs.Add(DateTime.Now.ToString() + ": " + ex.Message);
}
}
}
:挿入操作時には、私のデータベースのDTUが100%に達します。
150Kを一度にアップロードする必要がありますか?個別のデータテーブルとして、またはBatchSizeプロパティを使用して、それぞれ10K行のバッチを送信してみてください。可能であれば、ターゲット表の索引数を減らし、クラスタード・インデックス順にロードします。 –
私はbatchSizeを10Kに設定しました。私がデータベースで見ているものから、PKにのみインデックスがあります。あなたの返信ありがとう –
ソースデータはPKによって注文されていますか? –