分享方式:


壓縮檔案

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體

本文描述了如何使用 SQL Server Management Studio 或 Transact-SQL,在 SQL Server 中壓縮資料或記錄檔。

將資料頁面從檔案結尾移到靠近檔案前端的未使用空間,以壓縮資料並復原儲存空間。 當檔案結尾建立了足夠的可用空間後,檔案結尾的資料頁面便可取消配置並返回檔案系統。

限制

  • 主要資料檔案不能小於 model 資料庫中主要檔案的大小。

建議

  • 壓縮作業在大型 DELETE 陳述式、截斷資料表或卸除資料表作業等建立大量未用儲存空間的作業之後最有效。

  • 大部分資料庫都需要一些可用空間來執行每天的例行作業。 如果您反覆壓縮資料庫檔案,發現資料庫再次增長,就表示例行作業需要可用空間。 在這些情況之下,反覆壓縮資料庫檔案是一項會造成浪費的作業。 資料庫檔案成長所需的自動成長事件會阻礙效能。

  • 為壓縮檔案所移動的資料可散佈至檔案中的任何可用位置。 如此會造成索引片段,並可能導致大範圍之索引搜尋的查詢效能變慢。 若要消除資料片段,可考慮在壓縮之後重建該檔案的索引。

  • 除非您有特定的需求,否則請不要將 AUTO_SHRINK 資料庫選項設定為 ON。

備註

進行中壓縮作業可封鎖資料庫上的其他查詢,而且可由進行中查詢封鎖。 SQL Server 2022 (16.x) 中引進的壓縮檔案作業具有 WAIT_AT_LOW_PRIORITY 選項。 這項功能是 DBCC SHRINKDATABASEDBCC SHRINKFILE 額外新增的選項。 如果 WAIT_AT_LOW_PRIORITY 模式中的新壓縮作業,因長時間執行的進行中查詢而無法取得必要的鎖定,最終會一分鐘之後逾時,結束時不發出通知,從而防止其他查詢遭到封鎖。 WAIT_AT_LOW_PRIORITY 適用於資料檔案 (.mdf 和 .ndf)。 它不適用於交易記錄檔。 如需詳細資訊,請參閱 DBCC SHRINKFILE

權限

需要 系統管理員 固定伺服器角色或 db_owner 固定資料庫角色中的成員資格。

使用 SQL Server Management Studio (SSMS)

使用 SSMS 壓縮資料或記錄檔

  1. 在物件總管中,連接到 SQL Server Database Engine 的執行個體,然後展開該執行個體。

  2. 展開 [資料庫],然後以滑鼠右鍵按一下在您想要壓縮的資料庫。

  3. 指向 [工作]、[壓縮],然後選取 [檔案]

    Database
    顯示選取之資料庫的名稱。

    檔案類型
    選取檔案的檔案類型。 可用的選項為 [資料] 和 [記錄檔]。 預設選項為 [資料]。 選取不同的檔案群組類型,會據以變更其他欄位中的選取。

    檔案群組
    從與所選檔案類型關聯的檔案群組清單中選取檔案群組。 選取不同的檔案群組,會據以變更其他欄位中的選取。

    檔案名稱
    從選取檔案群組和檔案類型的可用檔案清單中選取檔案。

    地點
    顯示目前所選檔案的完整路徑。 路徑無法編輯,但可複製到剪貼板。

    目前配置的空間
    針對資料檔案,顯示目前的已配置空間。 針對記錄檔,顯示透過 DBCC SQLPERF(LOGSPACE) 輸出所計算的目前配置空間。

    可用空間
    針對資料檔案,顯示透過 DBCC SHOWFILESTATS(fileid) 輸出所計算的目前可用空間。 針對記錄檔,顯示透過 DBCC SQLPERF(LOGSPACE) 輸出所計算的目前可用空間。

    釋出未使用的空間
    導致檔案中任何未使用的空間釋出至作業系統,並將檔案壓縮到最後的配置範圍,以減少檔案大小而不移動任何資料。 不會嘗試將資料列重新放置到未配置的頁面。

    在釋放未使用的空間之前重新整理頁面
    相當於執行指定目標檔案大小的 DBCC SHRINKFILE。 選取此選項時,使用者必須在 [將檔案壓縮為] 方塊中指定目標檔案大小。

    [將檔案壓縮為]
    指定壓縮作業的目標檔案大小。 大小不能小於目前配置的空間,或大於配置給檔案的總範圍。 輸入超出下限或上限的值,將會在焦點變更或選取工具列上的任何按鈕時還原為最小值或最大值。

    將資料遷移至相同檔案群組中的其他檔案以清空檔案
    從指定檔案移轉所有資料。 此選項允許使用 ALTER DATABASE 陳述式卸載檔案。 此選項相當於使用 DBCC SHRINKFILE 選項執行 EMPTYFILE。 Azure SQL 資料庫或 Azure SQL Database Hyperscale 不支援 EMPTYFILE

  4. 選取檔案類型和檔案名稱。

  5. 或者,選取 [釋出未使用的空間] 核取方塊。

    選取此選項會使檔案中任何未使用的空間釋出至作業系統,並將檔案壓縮為最後配置的範圍。 這樣可減少檔案大小而不移動任何資料。

  6. 或者,在釋放未使用的空間之前,選取 [重新整理檔案] 核取方塊。 如果選取此選項,必須指定 [將檔案壓縮為] 的值。 預設會清除此選項。

    選取此選項會使檔案中任何未使用的空間釋出至作業系統,並嘗試將資料列重新放置到未配置的頁面。

  7. 或者,在壓縮資料庫之後,輸入資料庫檔案所要保留的可用空間最大百分比。 允許的值介於 0 到 99 之間。 只有在啟用 [釋出未使用的空間之前重新整理檔案] 時,才能使用此選項。

  8. 或者,選取 [將資料遷移至相同檔案群組中的其他檔案以清空檔案] 核取方塊。

    選取此選項,可將指定檔案中的所有資料移至檔案群組中的其他檔案。 然後可以刪除空的檔案。 此選項與使用 EMPTYFILE 選項執行 DBCC SHRINKFILE 相同。

  9. 選取 [確定]。

使用 Transact-SQL

使用 Transact-SQL 壓縮資料或記錄檔

  1. 連線至資料庫引擎。

  2. 在標準列上,選取 [新增查詢]。

  3. 複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。 此範例會使用 DBCC SHRINKFILE,將 UserDB 資料庫中名稱為 DataFile1 的資料檔案大小壓縮為 7 MB。

USE UserDB;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO