我有一個表有4000萬條記錄。創建標識列需要多長時間?
什麼是最好的(更快)?直接在該表中創建列或者創建具有標識列的另一個表並從第一個數據插入數據?
如果我創建具有4000萬點的記錄表標識列,是有可能的估計需要多長時間才能創造呢?
我有一個表有4000萬條記錄。創建標識列需要多長時間?
什麼是最好的(更快)?直接在該表中創建列或者創建具有標識列的另一個表並從第一個數據插入數據?
如果我創建具有4000萬點的記錄表標識列,是有可能的估計需要多長時間才能創造呢?
如果您在查詢窗口中使用ALTER TABLE [...] ADD ...
,這是相當快的,其實它早就結束了。如果您使用Management Studio表格設計器,它將表格複製到新表格中,放棄舊錶格,然後將新表格重新命名爲舊錶格。這需要一段時間,特別是如果您未預先生成數據庫和日誌以容納所需的額外空間。因爲只有一個單一事務,所以如果現在停止它,則需要大約16個小時才能回滾。
我已經使用了ALTER TABLE ... ADD ... – Zanoni 2009-08-20 18:05:58
QUERY是否被阻塞或正在進展?這看起來太長了。檢查wait_time和wait_resource是sys.dm_exec_requests – 2009-08-20 18:31:11
@Remus Rusanu =>查詢仍在運行,但我不知道問題在哪裏。 >>> WAIT_TIME = 0, wait_resource = 31:1:1219931, 狀態= SUSPENDED, 命令= ALTER TABLE, wait_type = PAGEIOLATCH_EX total_elapsed_time = 86053703 – Zanoni 2009-08-20 20:15:07
你能不能在創建數據庫的測試副本創建列,看看需要多長時間?
它已經在運行。他想知道它是否會完成,或者如果有什麼錯誤。 – geowa4 2009-08-20 12:45:09
在大家都知道之前,我回答了,所以是的,現在我們知道了。 – 2009-08-20 12:49:47
它是一個困難的,可能取消/停止腳本並嘗試在測試數據庫?或者再次平行測試一下,看看它在測試中是否能夠更快速地顯示出現問題?數據庫stil是否在應用程序中運行? – 2009-08-20 12:52:47
這種取決於。假設你將它附加到表的末尾,創建一個標識列不需要那麼長(好吧,這與表的大小有關)。如果沒有,服務器必須在所需位置創建一個標識列的新表,將所有行導出到新表,然後更改表名。我猜這就是這麼長時間。
很有意義,爲什麼在我的經驗中,時間量大致相同。感謝您的解釋。 – user158017 2009-08-20 12:52:12
我想了很多取決於硬件和DBMS你在。在我的環境,創建新表和複製舊的數據到這將需要約3或4小時。我希望增加一個身份專欄需要大約相同的時間,只是基於其他經驗。我在Oracle上使用SAN上的多個服務器,所以事情可以比在單個服務器環境中運行得更快。你可能不得不坐下來等待。
這是一款使用Microsoft SQL Server 2005的測試服務器。處理器Intel Core 2 DUO 2.20GHz,配備4GB RAM。 – Zanoni 2009-08-20 13:19:53
我猜它的封鎖 - 你使用GUI或查詢窗口(你知道它的下運行的SPID?)
嘗試這些 - 讓我們知道,如果他們給的結果和你不知道該怎麼做:
USE master
SELECT * FROM sysprocesses WHERE blocked <> 0
SELECT * FROM sysprocesses WHERE status = 'runnable' AND spid <> @@SPID
這兩個查詢都沒有返回。 – Zanoni 2009-08-20 18:04:58
我需要知道,因爲我創造了標識列自16個小時前...和尚未完成... – Zanoni 2009-08-20 12:53:10
22小時計數... – Zanoni 2009-08-20 18:00:17
哇。讓我們知道何時/如果它完成。我很好奇看到這裏發生了什麼。 – user158017 2009-08-21 00:57:23