c# - Azure 中的 SqlBulkCopy 超时

标签 c# azure azure-sql-database azure-worker-roles sqlbulkcopy

我们在 Azure 中遇到 SqlBulkCopy 问题。

上下文如下:我们有一个大约有 1000 万行的表。每行大约有 15 列。

我们正在将该数据迁移到新模型中,这需要对数据进行拆分,以便 1 行 15 列变成 15 行。

一开始它运行得很好。目标表现在包含 17 767 235 行,速度相当快。

此时,它开始抛出异常。

我做了一些修改来增加超时并使用批处理,但它似乎完全被阻止了。

这是原始异常:

Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
The statement has been terminated.; TraceSource 'WaWorkerHost.exe' event Services.DataMigration.Edmi_IN_0   5/9/2014 2:44 PM    2   1508    280

      at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlBulkCopy.RunParser(BulkCopySimpleResultSet bulkCopyHandler)
   at System.Data.SqlClient.SqlBulkCopy.CopyBatchesAsyncContinuedOnSuccess(BulkCopySimpleResultSet internalResults, String updateBulkCommandText, CancellationToken cts, TaskCompletionSource`1 source)
   at System.Data.SqlClient.SqlBulkCopy.CopyBatchesAsyncContinued(BulkCopySimpleResultSet internalResults, String updateBulkCommandText, CancellationToken cts, TaskCompletionSource`1 source)
   at System.Data.SqlClient.SqlBulkCopy.CopyBatchesAsync(BulkCopySimpleResultSet internalResults, String updateBulkCommandText, CancellationToken cts, TaskCompletionSource`1 source)
   at System.Data.SqlClient.SqlBulkCopy.WriteToServerInternalRestContinuedAsync(BulkCopySimpleResultSet internalResults, CancellationToken cts, TaskCompletionSource`1 source)
   at System.Data.SqlClient.SqlBulkCopy.WriteToServerInternalRestAsync(CancellationToken cts, TaskCompletionSource`1 source)
   at System.Data.SqlClient.SqlBulkCopy.WriteToServerInternalAsync(CancellationToken ctoken)
   at System.Data.SqlClient.SqlBulkCopy.WriteRowSourceToServerAsync(Int32 columnCount, CancellationToken ctoken)
   at System.Data.SqlClient.SqlBulkCopy.WriteToServer(DataTable table, DataRowState rowState)

最佳答案

SQL Azure 非常善于保护自身。这会导致节流甚至断开连接。包含大量数据的标准批量复制技术通常会失败。我强烈建议您阅读 Alexandre Brisebois 关于 Azure 批量复制技术的博客文章:

http://alexandrebrisebois.wordpress.com/2013/02/16/using-sqlbulkcopy-to-insert-massive-amounts-of-data-into-windows-azure-sql-database/

关于c# - Azure 中的 SqlBulkCopy 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23569863/

相关文章:

c# - 如何从未经检查的异常中恢复?

c# - 如何通过 C# 中的 Azure 函数在设备中执行方法?

c# - 如何修复 Azure Web 应用程序上的 ASP.NET MVC 中的缓慢加载操作

c# - 与 Azure SQL 数据库的可靠连接

c# - 如何使用 Azure SQL 提高 SqlBulkCopy 性能

c# - 为什么我得到 i :0#. w|domain\\username 和 RunWithElevatedPrivileges domain\apppool?

c# - ManagedThreadId不断增加

node.js - 创建后从设备 JSON 生成 Azure IoT 中心的连接字符串

c# - Excel 后期绑定(bind) EntireColumn.NumberFormat

azure - Azure Blob 索引器的问题