優化大容量匯入效能

iSQlServer發表於2008-11-26

本主題介紹了有關對使用 bcp 命令、BULK INSERT 語句或 OPENROWSET(BULK...) 函式 (Transact-SQL) 將資料大容量匯入 Microsoft SQL Server中的表這一過程進行優化的選項。若要儘可能快地大容量匯入或匯出資料,瞭解影響效能和可用於管理效能的命令限定符的因素非常重要。如果可能,使用 Transact-SQL 語句將資料大容量匯入 SQL Server,因為 Transact-SQL 比 bcp 快。

注意:
有關這些方法的比較,請參閱關於大容量匯入和大容量匯出操作。
 


如何最快地提高特定大容量匯入操作的效能受下列因素的影響:

表是否包含約束或觸發器,或者兩者都有。

資料庫使用的恢復模式。
有關詳細資訊,請參閱恢復模式概述。

存放複製資料的表是否為空。

表是否包含索引。

是否指定了 TABLOCK。

從單個客戶端複製資料,還是從多個客戶端並行複製資料。

是否在執行 SQL Server 的兩臺計算機之間複製資料。

重要提示:
在 SQL Server 2005 和更高版本中,在啟用觸發器後便可使用大容量匯入優化。行版本控制用於觸發器並將行版本儲存在 tempdb 中的版本儲存區中。您可能需要增加 tempdb 的大小以適應觸發器對版本儲存區的影響,才能使用觸發器大容量匯入大批資料記錄。
 


有關這些因素如何影響大容量匯入方案的資訊,請參閱優化大容量匯入指南。

 優化大容量匯入的方法
若要加快大容量匯入資料的速度,SQL Server 提供了下列方法:

使用最小日誌記錄
簡單恢復模式按最小方式記錄大多數大容量操作。
對於完整恢復模式下的資料庫,大容量匯入期間執行的所有行插入操作被完整地記錄到事務日誌中。如果資料匯入量較大,會導致迅速填滿事務日誌。對於大容量匯入操作,按最小方式記錄比完整記錄更有效,並減少了大容量匯入操作填滿日誌空間的可能性。若要對通常使用完整恢復模式的資料庫按最小方式記錄大容量匯入操作,可以先將資料庫切換到大容量日誌恢復模式。在大容量匯入資料之後,將恢復模式切換回完整恢復模式。有關詳細資訊,請參閱從完整恢復模式或大容量日誌恢復模式切換。
注意:
如果優化的大容量記錄適用,則插入的行將按最小方式記錄;否則,插入的行將完全記錄在事務日誌中。有關何時記錄大容量匯入操作以及如何執行按最小方式記錄的大容量匯入操作的資訊,請參閱可以儘量減少日誌量的操作和在大容量匯入中按最小方式記錄日誌的前提條件。
 


將資料從多個客戶端並行匯入到單個表
SQL Server 允許將資料從多個客戶端並行大容量匯入到單個表。三個大容量匯入機制都支援並行匯入資料。這可以提高資料匯入操作的效能。
有關詳細資訊,請參閱使用表級鎖定並行匯入資料。

使用批處理
有關匯入資料時使用批處理的資訊,以及有關用於管理批處理的命令限定符的資訊,請參閱管理大容量匯入的批處理。
注意:
OPENROWSET 子句的 BULK 選項不支援批大小控制。
 


禁用觸發器
禁用觸發器可能會提高效能。
有關觸發器執行對大容量匯入操作的影響以及如何啟用或禁用觸發器的詳細資訊,請參閱匯入大容量資料時控制觸發器執行。

禁用約束
有關約束檢查對大容量匯入操作的影響以及如何啟用或禁用表的 CHECK 約束和 FOREIGN KEY 約束的資訊,請參閱通過大容量匯入操作控制約束檢查。

對資料檔案中的資料排序
預設情況下,大容量匯入操作假定資料檔案未排序。如果表具有聚集索引,則使用 bcp 實用工具、BULK INSERT 語句和 OPENROWSET(BULK…) 函式 (Transact-SQL) 即可指定大容量匯入操作期間資料檔案中資料的排序方式。根據需要,可以將資料檔案中的資料按表中相同的順序進行排序。但是,如果為資料檔案和表指定相同的順序,則可以提高大容量匯入操作的效能。
有關詳細資訊,請參閱控制大容量匯入資料時的排序順序。

C 控制鎖定行為
有關如何指定大容量匯入操作期間的鎖定行為的資訊,請參閱控制大容量匯入的鎖定行為。

匯入本機格式資料
有關詳細資訊,請參閱使用本機格式匯入或匯出資料和使用 Unicode 本機格式匯入或匯出資料。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-503400/,如需轉載,請註明出處,否則將追究法律責任。

相關文章