管理大容量匯入的批處理
本節介紹如何管理為大容量匯入操作確定批處理大小的方式。 預設情況下,資料檔案的所有行都作為未知大小的單個批處理在單個事務中匯入。 在這種情況下,如果匯入操作在完成之前失敗,則會回滾整個事務,並且不會將任何資料新增到目標表中。 失敗的操作必須隨後從資料檔案的開始位置重新啟動。
將大型資料檔案作為單個批處理匯入可能會出現問題,因此,可以使用 bcp 和 BULK INSERT 通過一系列批處理匯入資料,每個批處理的大小都小於該資料檔案。 每個批處理都將匯入並記錄在一個單獨的事務中,提交完給定的事務後,由該事務匯入的行也將提交。 如果操作失敗,則只會回滾通過當前批處理匯入的行,您可以從失敗批處理的開始位置而不是從資料檔案的開始位置恢復匯入資料的操作。
注意:
有關批處理如何工作的資訊,請參閱批處理。
另外,如果選擇不限制批處理大小,則可通過在命令中估計資料檔案的大小來提高效能。 為該操作建立查詢計劃時,查詢處理器會使用該估計值。
注意:
指定批處理大小或資料檔案大小時,不要求很準確。
下表彙總了支援這些方法的限定符。
命令 批處理大小 每批傳送的行數 每批傳送的千位元組數
bcp 1
-b batch_size
-h "ROWS_PER_BATCH = bb"
-h "KILOBYTES_PER_BATCH = cc"
BULK INSERT2
BATCHSIZE = batch_size
ROWS_PER_BATCH = rows_per_batch
KILOBYTES_PER_BATCH = kilobytes_per_batch
注意:
如果將此選項與 BATCHSIZE 一起使用,會生成錯誤。
INSERT ... SELECT * FROM OPENROWSET(BULK...)
—3
ROWS_PER_BATCH = rows_per_batch
—3
1 在 bcp 命令中,不要同時使用 -b batch_size 開關和 ROWS_PER_BATCH 或 KILOBYTES_PER_BATCH 提示。 組合使用這些開關和提示將導致錯誤。
2 在 BULK INSERT 命令中,如果將 BATCHSIZE 與 ROWS_PER_BATCH 或 KILOBYTES_PER_BATCH 一起使用,則優先使用 BATCHSIZE。
3 OPENROWSET 既沒有 BATCHSIZE 選項,也沒有 KILOBYTES_PER_BATCH 選項。
下列各節介紹了這些限定符的使用方法。
指定批處理的近似大小
匯入大量行時將資料分成若干批處理具有很多優點。 每個批處理完成後,都會記錄事務。 如果由於某種原因,大容量匯入操作尚未完成即終止,只會回滾當前的事務(批處理)。
注意:
大容量日誌記錄在事務日誌中包含了所匯入資料的副本。 這會導致日誌快速增長,不過,可以在每個批處理後備份日誌以回收日誌空間。
若要通過指定了近似大小的一系列批處理來匯入資料檔案,請使用以下限定符:
對於 bcp:-b
對於 BULK INSERT:BATCHSIZE
每一批行均作為單獨的事務插入。 如果由於某種原因,大容量匯入操作尚未完成即終止,只會回滾當前的事務。 例如,如果資料檔案包含 1000 行,而使用的批處理大小為 100,則 Microsoft SQL Server 會將該操作作為 10 個單獨的事務來記錄,每個事務將 100 行插入到目標表中。 如果大容量匯入操作在載入到 750 行時終止,則 SQL Server 回滾當前事務時只會刪除此前的 49 行。 目標表中仍會包含前 700 行。
SQL Server 根據批處理大小的值自動優化載入操作,從而優化效能。 一般來說,應該使批處理大小盡可能大。 通常,批處理的大小越大,大容量匯入操作的效能就越好。 但是,也存在少數例外情況。 如果目標表上存在一個或多個索引,則較大的批處理大小在排序時會對記憶體產生壓力。 同時,如果執行並行載入時未使用 TABLOCK 選項,較大的批處理大小會導致更多的阻塞。
注意:
將資料從 SQL Server 例項大容量匯出到資料檔案中時,批處理大小不適用。
指定資料檔案的近似大小
如果未指定大容量匯入操作的批處理大小,可以指明資料檔案的近似大小,使查詢處理器在查詢計劃中有效地分配資源。 若要指明資料檔案的近似大小,請估計行數或資料的千位元組數,如下所示:
估計每批的行數
若要估計行數,請使用 ROWS_PER_BATCH 提示或選項。 如果指定的值 > 0,則查詢處理器將使用 ROWS_PER_BATCH 的值作為在查詢計劃中分配資源的提示。 此值應該與實際的行數具有相同的順序。
儘管資料檔案中的所有行在一個批處理中複製到 SQL Server 例項中,但是 bcp 每傳送 1000 行,就會顯示“已將 1000 行傳送到 SQL Server”的訊息。 此訊息僅供參考,並且使用任何大小的批處理均會出現。
估計每批的千位元組數
若要以千位元組數估計資料檔案的大小,請使用 KILOBYTES_PER_BATCH 提示或選項。SQL Server 將根據指定的值優化大容量匯入操作。
注意:
如果大容量匯入大型資料檔案而未指定批處理大小或任何最小日誌記錄優化,事務日誌可能會在大容量匯入操作完成之前就已填滿。 若要避免這種情況,可以擴大事務日誌或允許其自動增長。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-503398/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【MATLAB Image Processing Toolbox 入門教程九】“匯入、匯出和轉換”之“影像序列和批處理”Matlab
- 開啟windows批處理大門Windows
- 使用csv批量匯入、匯出資料的需求處理
- tsc、babel、webpack對模組匯入匯出的處理BabelWeb
- 大資料爭論:批處理與流處理的C位之戰大資料
- Sqoop匯入資料異常處理OOP
- 批處理概述
- Apache Beam,批處理和流式處理的融合!Apache
- java當中的批處理Java
- JDBC當中的批處理JDBC
- Dos批處理常用命令大全入門
- Spring中實現面向寫入的批次和批處理APISpringAPI
- 什麼是批處理
- Dynamics CRM 2013 批處理
- bat 批處理字串操作BAT字串
- window 批處理檔案
- 【故障處理】Linux下匯入匯出“IMP-00030: failed to create file ... for write”LinuxAI
- maatwebsite/excel3.1 匯入excel 公式怎麼處理WebExcel公式
- MochaImport+ for Mac - 匯入處理Mocha跟蹤資料AIImportMac
- EasyExcel處理Mysql百萬資料的匯入匯出案例,秒級效率,拿來即用!ExcelMySql
- 簡單實現批處理
- Python批處理:檔案操作Python
- MPP架構和批處理架構
- bat批處理常用指令碼BAT指令碼
- 批處理命令之tree命令
- 使用go語言對csv檔案進行解析處理,匯入匯出。Go
- 匯出處理耗時的檔案
- SpringBatch基本的批處理指導原則SpringBAT
- Windows批處理中的變數和值Windows變數
- BAT批處理判斷服務是否正常執行(批處理命令綜合應用)BAT
- 使用無伺服器實現檔案處理的批處理 - DZone Cloud伺服器Cloud
- ElasticSearch7.4批量匯入_bulkElasticsearch
- 帶你認識FusionInsight Flink:既能批處理,又能流處理
- 批處理最佳實踐 - Vlad Mihalcea
- 【大資料】離線批處理計算MapReduce | 複習筆記大資料筆記
- Spring Batch 基本的批處理指導原則SpringBAT
- Windows 批處理之DATE命令的使用方法Windows
- [20190219]變態的windows批處理6.txtWindows
- 04 Windows批處理中的條件執行Windows