Sql-Server

dbcc cleantable batch size 解釋

  • April 5, 2019

我有一個非常大的表,其中包含 5 億行和一個我將刪除的 Text 列。在我的開發環境中,我已經刪除了列並開始了回收過程,但我不確定“DBCC CLEANTABLE (MyDb,‘dbo.LargeTbl, 100000)”語句上的批處理大小實際上是做什麼的。

我嘗試將其設置為 5,希望它檢查前 5 行並結束。“DBCC CLEANTABLE (MyDb,‘dbo.LargeTbl, 5)”花了 28 小時。所以我恢復了數據庫,將其設置為 100,000,花了 4 個小時

實際問題:批處理大小是否告訴 dbcc cleantable 一次要執行多少行,並且一次連續執行 100K 直到它通過所有 500mil 行?或者一旦我執行了 100,000 行,我是否必須再次執行它,直到我完成所有 5 億行?

在我的第二次測試中,(執行 100K 一次)我能夠回收 30GB。然後我對所有索引執行索引重組並回收和額外的 60GB ..

根據Microsoft 文件,Batch Size 告訴 DBCC CleanTable 每個事務要處理的行數。這與 DBCC CleanTable 程序執行時 DBCC CleanTable 內部處理的行數有關。

通過使用文件中的範例並修改以添加一百萬行,然後使用不同的批處理大小值(見下文)多次執行範例腳本,似乎指定小批處理大小會增加執行時間,因為 DBCC CleanTable 僅在執行在批量大小中指定的行數上。

  • 未指定批量大小
  • 批量大小為 5
  • 批量大小為 100,00

引用自:https://dba.stackexchange.com/questions/234041