2011-04-19 57 views
0

我正在使用SQL Server 2008 R2,並且我有一個用VB.NET編寫的轉換,它需要幾個小時才能運行並轉換數百萬條記錄。有時我需要取消該流程,該流程將回滾事務。當發生這種情況時,我不希望它需要幾個小時才能像它那樣回滾。如何設置具有大量記錄的轉換的事務隔離級別

因此,我一起移除了交易,以便沒有時間回滾,但它將所有記錄保留在它們所處的狀態。但是,我有一張有數百萬條記錄的表格。我刪除所有記錄開始。只需要幾小時就可以刪除所有記錄。當我查看錶格的RowCount時,它表示零,就像它刪除了所有內容,但它正在等待某件事,而我無法弄清楚是什麼。我希望將DELETE命令放在隔離級別爲READ UNCOMMITTED的事務中會有所幫助。

在我嘗試此操作之前,我想了解什麼是大量數據事務隔離級別的最佳實踐,因爲這需要幾個小時。另外,您是否認爲如果我將整個轉換放入READ UNCOMMITTED事務中,如果我取消該過程,則不需要任何時間?

回答

2

隔離級別與回滾或提交事務無關,他們在那裏給你更多的控制權以防止丟失更新,幻像讀取,可重複讀取,髒讀等。 如果需要2個小時才能完成。 。它可能會需要2小時才能回滾

恢復水平呢,簡單的或散裝的恢復將是使用bcp或BULK INSERT插入數據時更快

是你寫的代碼在一套基於時尚,還是你循環通過使用邪惡的遊標?

您是否在桌子上觸發了未優化的觸發器?

要刪除所有行截斷表,因爲這是最低限度記錄或一批批刪除過程,例如10000左右,如果你不想刪除所有

+0

我不使用邪惡光標,我沒有觸發器,我不知道TRUNCATE TABLE。感謝提示 – 2011-04-19 15:53:07

+0

TRUNCATE TABLE和BULK INSERT。 – SQLMason 2011-04-19 17:04:20

1

我有一張數百萬記錄的表格。我刪除所有記錄開始。僅需要幾小時 即可刪除所有記錄。

truncate table xxx ----無論表大小如何,都不應該超過幾分之一秒。

想要在我嘗試此操作之前獲得有關大數據量事務隔離級別的最佳做法的意見,因爲這需要幾個小時。

取決於進程,數據量和需求。沒有通用答案。不過,擁有非dektop級別的硬件可以提供幫助。在數據庫服務器上的分鐘刪除語句中處理2-5百萬行是沒有問題的(即,不是1-2個光盤,但有一些)。

另外,你想,如果我把整個轉換在讀的事務的未提交不會 採取任何時間,如果我取消的過程?

不需要回滾需要時間,因爲sql server沒有爲此優化,必須回滾到目前爲止所做的所有更改。