2011-05-23 97 views
2

較大的一個,我在SQL Server中的新手,有以下困境:批量複製到SQL Server 2005中

我有相同的結構兩個表。稱它爲runningTblfinalTbl

runningTbl每15分鐘包含約60萬到100萬行。

runningTbl中完成一些數據清理之後,我想將所有記錄移動到finalTbl。目前約有3800萬行。

上述過程需要每15-20分鐘重複一次。

的問題是,數據從runningTblfinalTbl移動正在以時間方式超過20分鐘..

最初,當這個表格是小型IT拿東西從10秒到2分鐘複製。

現在只需要很長時間。

任何一個可以協助這個嗎? SQL查詢之後..

感謝

+0

我已經嘗試過兩種不同的查詢到目前爲止... Q1:。 INSERT INTO [MYDB] [DBO] [processed_logs] \t \t \t([UnixTime] \t \t \t [ElapsedTime] \t \t \t,[ClientIP] \t \t \t,[反] \t \t \t,[ResponseSize] \t \t \t,[Request1] \t \t \t,[RequestAddress] \t \t \t,[FullUserName] \t \t \t) \t SELECT [UnixTime] \t \t,[ElapsedTime] \t \t,[ClientIP] \t \t,[Trans] \t \t,[ResponseSize] \t \t [ofRequest1] \t \t [RequestAddress] \t \t [FullUserName] \t FROM [MYDB] [DBO]。[unprocessed_logs] – Ernesto 2011-05-23 11:49:44

+0

你嘗試過什麼疑問這麼遠?你有沒有嘗試過使用SELECT INTO? – 2011-05-23 11:51:31

+1

桌子上是否有索引?你可以發佈查詢的執行計劃嗎? – Andomar 2011-05-23 11:52:57

回答

0

有許多的東西,你需要爲了得到複製數據的最有效的方法來做。到目前爲止,你走在正確的軌道上,但你還有很長的路要走。我建議你先看看你的索引。可能有優化可以幫助。接下來,請確保您沒有可能導致速度放慢的表格上的觸發器。接下來,更改日誌記錄級別(如果這是可置換的)。

這裏有一堆更多的幫助(微軟):

http://msdn.microsoft.com/en-us/library/ms190421(v=SQL.90).aspx

基本上你是使用BCP在正確的軌道上。這實際上是微軟的建議:

要將數據從一個SQL Server實例大容量複製到另一個實例,請使用bcp將表數據導出到數據文件中。然後使用其中一種批量導入方法將文件中的數據導入到表中。使用本地或Unicode本機格式執行批量導出操作和批量導入操作。

當你這樣做的時候,如果有太多的數據被引入(根據你使用的索引的類型),你還需要考慮刪除索引的可能性。如果您使用聚集索引,在導入之前對數據進行排序也可能是一個好主意。下面是詳細信息(包括上述報價的源):

http://msdn.microsoft.com/en-US/library/ms177445(v=SQL.90).aspx

+0

感謝Biggs,表格沒有任何觸發器。定義的索引是聚集的。我將在導入之前嘗試數據的排序。 – Ernesto 2011-05-23 12:22:02

+0

我運行了一個測試,使用bcp out將記錄導出到數據文件,然後使用批量插入將記錄導入到finalTbl。整個過程在一分鐘內完成。 然後我刪除了finalTbl中的所有索引,並且過程更快。 看起來批量插入比bcp快得多.. – Ernesto 2011-05-24 05:39:17

-1

我建議你應該有一個窗口服務,並使用定時器和一個布爾變量。一旦你的請求被髮送到服務器,將bool設置爲高位,並且定時器事件不應該執行代碼,直到該位爲低。

0

對於初學者來說:多年來我學到的東西之一是MSSQL在優化所有類型的操作方面做得非常出色,但這樣做很大程度上依賴於所涉及的所有表的統計數據。因此,我建議運行「UPDATE STATISTICS processed_logs」&「UPDATE STATISTICS unprocessed_logs」,然後再運行實際的插入;即使在一張大桌子上,這些東西也不需要那麼長時間。 除此之外,基於上面的查詢,很大程度上取決於目標表的索引。我假設目標表在至少(至少)UnixTime上具有聚簇索引(或PRIMARY KEY),否則當您在已有的記錄之間擠入越來越多的數據時,會創建主要的數據碎片。爲了解決這個問題,你可以嘗試在一段時間內對目標表進行碎片整理(可以在線完成,但需要很長時間),但是要創建聚集索引(或PK),以便數據總是附加到表的尾部是更好的方法;好吧,至少在我看來。