考慮:SqlBulkCopy.WriteToServer掛起Thread.Abort的叫,但不知道爲什麼
- 一個
BenchMark
類,讓我知道什麼時候事情已經完成。 - 已經被解析成多個列表
一個非常大的XML文件(〜120MB)的某些代碼:
SqlConnection con = null;
SqlTransaction transaction = null;
try
{
con = getCon(); // gets a new connection object
con.Open();
transaction = con.BeginTransaction();
var bulkCopy = new SqlBulkCopy(con, SqlBulkCopyOptions.Default, transaction)
{
BatchSize = 1000,
DestinationTableName = "Table1"
};
// assume that the BenchMark class is working
b = new BenchMark("Table1");
bulkCopy.WriteToServer(_insertTable1s.AsDataReader()); // _insertTables1s is a List<Table1>
b.Complete();
LogHelper.WriteLogItem(b);
b = new BenchMark("Table2");
bulkCopy.DestinationTableName = "Table2";
bulkCopy.WriteToServer(_insertTable2s.AsDataReader()); // _insertTables2s is a List<Table2>
b.Complete();
LogHelper.WriteLogItem(b);
// etc... this code does a batch insert into about 7 tables all having about 40,000 records being inserted.
b = new BenchMark("Transaction Commit");
transaction.Commit();
b.Complete();
}
catch (Exception e)
{
transaction.Rollback();
LogHelper.WriteLogItem(
LogLevel.Critical,
LogType.DataProcessing,
e.ToString());
}
finally
{
con.Close();
}
問題:
在我的本地開發環境,一切安好。當我在雲中運行這個操作時會導致它掛起。使用LogHelper.WriteLogItem
方法,我可以看到這個過程的進展。我觀察它隨機掛在一張特定的桌子上。不會引發異常,因此事務不會回滾。說它掛在Table2
批量插入。使用MS SQL Management Studio中,我對Table3
,Table2
和Table1
沒有問題(這意味着該交易被中止?)
因爲它掛起運行查詢,我會去重新運行該程序。這一次,它遲早掛起,所以我可能會得到日誌是這樣的:
7755 Benchmark LoadXML took 00:00:04.2432816
7756 Benchmark Table1 took 00:00:06.3961230
7757 Benchmark Table2 took 00:00:05.2566890
7758 Benchmark Table3 took 00:00:08.4900921
7759 Benchmark Table4 took 00:00:02.000
...它掛在表5(因爲基準從未完成)。我去運行它,日誌的其餘部分看起來像:
7780 Benchmark LoadXML took 00:00:04.1203923
...它現在掛在這裏。
如果有幫助,我正在使用rackspace雲託管。我已經能夠通過從我的dbml文件中刪除所有表並讀取它們,但是這次它不起作用來解決此問題。我想知道正在處理的數據量是否會導致問題?
編輯:此示例中的代碼在異步線程中運行。我發現線程正在中止未知的原因,我需要找出爲什麼要解決這個問題。
你可以嘗試在每個批量拷貝之後對事務進行提交,然後看看會發生什麼? – mservidio 2011-04-26 21:31:10
我會看看這是否有效,但這不會解決問題,因爲數據是版本化的,事務需要原子化。 – DJTripleThreat 2011-04-26 21:36:14
您要處理的每個批量插入行的行數是多少? – mservidio 2011-04-26 21:40:06