壓縮檔案

適用于:yesSQL Server (所有支援的版本) Azure SQL Database YesYes Azure SQL 受控執行個體

本文說明如何使用 SQL Server Management Studio 或 Transact-SQL,壓縮SQL Server中的資料或記錄檔。

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

限制事項

  • 主要資料檔無法縮到小於 model 資料庫中主要資料檔的大小。

建議

  • 壓縮作業在建立大量未使用儲存空間的作業之後最有效,例如大型 DELETE 子句、截斷資料表或卸載資料表作業。

  • 大部分資料庫都需要一些可用空間來執行每天的例行作業。 如果您重複壓縮資料庫檔案,並注意到資料庫大小再次成長,這表示一般作業需要可用空間。 在這些情況下,重複壓縮資料庫檔案是浪費的作業。 增加資料庫檔案所需的自動成長事件會阻礙效能。

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

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

備註

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

Permissions

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

使用 SQL Server Management Studio

若要壓縮資料檔或記錄檔

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

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

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

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

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

    檔案群組
    從與上面選取之 [檔案類型] 相關聯的檔案群組清單中選取檔案群組。 若選取不同的檔案群組,就會變更其他欄位中的選取項目。

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

    位置
    顯示目前選取之檔案的完整路徑。 無法編輯路徑,但是可以將它複製到剪貼簿。

    目前配置的空間
    若要資料檔,則顯示目前配置的空間。 針對記錄檔,顯示從 DBCC SQLPERF(LOGSPACE) 的輸出計算而來的目前配置空間。

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

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

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

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

    將資料移轉至同一檔案群組中的其他檔案,以清空檔案
    移轉來自指定之檔案的所有資料。 這個選項允許檔案使用 ALTER DATABASE 陳述式卸除。 此選項相當於執行具有 EMPTYFILE 選項的 DBCC SHRINKFILE。

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

  5. (選擇性) 選取 [釋放未使用的空間] 核取方塊。

    選取此選項,會讓檔案中任何未使用的空間釋出到作業系統,並壓縮文件到最後的配置範圍。 如此一來無需移動任何資料即可縮減檔案大小。

  6. (選擇性) 選取 [釋放未使用空間之前重新組織檔案] 核取方塊。 若選取此選項,則必須在 [將檔案壓縮為] 中指定一個值。 根據預設,會清除此選項。

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

  7. (選擇性) 輸入資料庫壓縮後資料庫檔案中最大的可用剩餘空間百分比。 允許值介於 0 和 99 之間。 只有當啟用 [釋放未使用空間之前重新組織檔案] 時,才能使用此選項。

  8. (選擇性) 選取 [將資料移轉至同一檔案群組中的其他檔案,以清空檔案] 核取方塊。

    選取此選項,使檔案群組中指定檔案內的所有資料都移到其他檔案內。 然後即可刪除空白檔案。 這個選項的作用與使用 EMPTYFILE 選項執行 DBCC SHRINKFILE 的作用相同。

  9. 選取 [確定]。

使用 TRANSACT-SQL

若要壓縮資料檔或記錄檔

  1. 連線至資料庫引擎。

  2. 從 [標準] 列中,選取 [ 新增查詢]。

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

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

另請參閱

下一步