0

我已經有SSIS包出口2.5千兆字節的數據包含1000萬記錄到Sql Server數據庫有10個分區,包括主文件組。SSIS包中有「ROW PER BATCH」和「MAX INSERT COMMIT SIZE」的含義嗎?

之前更改默認最大插入提交大小即「2147483647」和每批次行。它正在採取7分鐘的快速加載選項完成改造。

但是用一些公式來修飾它的一些體面的價值後,執行只用了2分鐘。

FYI- DefaultMaxBufferRows & DefaultMaxBufferSize分別在兩個scenorio即10000和10 MB默認值。

爲了計算最大插入提交大小每批 下面calucation用於 & 行。

1)計算來自正在傳輸的源記錄的長度。大約有1038個字節。

CREATE TABLE [dbo].[Game_DATA2](
    [ID] [int] IDENTITY(1,1) NOT NULL, -- AUTO CALCULATED 
    [Number] [varchar](255) NOT NULL, -- 255 bytes 
    [AccountTypeId] [int] NOT NULL, -- 4 bytes 
    [Amount] [float] NOT NULL,-- 4 bytes 
    [CashAccountNumber] [varchar](255) NULL, -- 255 bytes 
    [StartDate] [datetime] NULL,-- 8 bytes 
    [Status] [varchar](255) NOT NULL,-- 255 bytes 
    [ClientCardNumber] [varchar](255) NULL -- 255 bytes 
) 

2)每批行數= packate_size/bytes/record = 32767/1038 = 32。

3)最大插入提交大小= packate尺寸*交易數= 32767×100 = 3276700 (Packate大小和數量的事務是變量可以按要求改變)

問題:

  • 每個批次的行和最大插入提交大小是否有相關性?由於在調用DFT(數據流任務)執行時檔案article中沒有提及任何信息。

  • 這些配置是否可以與DefaultBuffermaxzie和
    DefualtBuffermaxrows?if yes how?

回答

1

這些參數僅適用於DFT OLE DB目標。 OLE DB目標發出一個insert bulk命令。這兩個參數控制它以下列方式:

  • 最大插入提交大小 - 如何在一個批處理插入大量數據的控制。因此,如果您將MICS設置爲5000,並且您有9000行,並且在前5000個結果中遇到錯誤,則整個5000批次將會回滾。 MISC等同於BULK INSERT transact-sql命令中的BATCHSIZE參數。
  • 每批行數 - 僅作爲查詢優化程序的提示。這個值應該設置爲實際預期的行數。 RPB等同於BULK INSERT transact-sql命令的ROWS_PER_BATCH參數。
    指定MICS的值將會產生一些影響。每個批次都被複制到事務日誌中,這會使其快速增長,但可以在每批次後備份該事務日誌。另外,如果您在目標表上有索引,並且如果您沒有使用表鎖定,那麼擁有大批量將會對內存產生負面影響,您可能會發生更多阻塞。

MS Article on this command。

DefaultBuffermaxsizeDefualtBuffermaxrows控制RAM的緩衝器管理內部DFT本身,且具有與上述選項沒有干擾。

+0

那麼對於具有行的實際預期數量爲10 million.Can我們用上述公式的文件的RPB價值?或者,它是**嘗試和錯誤**的基礎方法。 –

+0

@HarsimranjeetSingh,留下RPB在默認情況下插入其設置爲實際的行號,OLE DB會爲你。您可以設置上述限制條件。在你的情況下,我會先玩MICS。 – Ferdipux

0

親愛Harsimranjeet辛格;

在基於我個人的經驗,ROWS_PER_BATCH確定每批次oledb_destination必須從DFT組件收到而DefualtBuffermaxrows確定DFT的bacth大小的行數,所以DefualtBuffermaxrows是依賴於SSIS服務器的規格和ROWS_PER_BATCH是依賴於目標服務器並且每個都必須根據他們的條件設置。

而且Maximum_Insert_Commit_Size確定當它擊中數則在日誌文件中寫入和它COMMITED的記錄數;減少這一數字,使增加的數量是指記錄,這是不好的,但它會導致MSDB(系統DB)不膨脹,這是爲提高性能非常不錯。

另一點,是DefualtBuffermaxrows和DeafultBufferSize之間關係,即必須設置在一起。 DefualtBuffermaxrows乘以每個記錄的大小必須基本等於DeafultBufferSize,如果這是更大然後SSIS降低,要達到到,如果這是比最小緩衝區大小越小小,然後增加它觸及最小緩衝區大小。這些操作會嚴重降低軟件包的性能。

祝你好運!