共用方式為


壓縮資料庫

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

本文描述了如何使用 SQL Server Management Studio 中的物件總管或 Transact-SQL,在 SQL Server 中壓縮資料庫。

將資料頁面從檔案結尾移到靠近檔案前端的未使用空間,以壓縮資料並復原儲存空間。 當檔案末尾創建足夠的可用空間後,檔案末尾的數據頁可以釋放並返還給文件系統。

警告

  • 為壓縮檔案所移動的資料可散佈至檔案中的任何可用位置。 如此會造成索引碎片化,並可能導致在索引中搜尋範圍時的查詢效能變慢。 若要消除資料片段,可考慮在壓縮之後重建該檔案的索引。
  • 壓縮作業不應視為一般維修作業。 因定期商務作業成長的資料和記錄檔,不需要壓縮作業。

局限性

  • 資料庫的大小不得小於資料庫大小下限。 大小下限是最初建立資料庫時指定的大小,或是使用檔案大小變更作業設定的最後一個明確大小,例如 DBCC SHRINKFILE。 例如,如果最初建立的資料庫大小為 10 MB,且增長至 100 MB,則資料庫可縮減為 10 MB 的最小大小,即使資料庫中的所有資料都被刪除。

  • 資料庫在備份時不能進行壓縮。 反過來說,當資料庫上正在進行壓縮作業時,也不能對其進行備份。

建議

  • 查看資料庫中目前未分配的空間量。 如需詳細資訊,請參閱 顯示資料庫的數據和記錄空間資訊

  • 當您計畫壓縮資料庫時,請考量下列資訊:

    • 縮減作業在大型 DELETE 陳述式、清空資料表或刪除資料表作業等創造大量未用儲存空間的作業之後最為有效。

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

    • 壓縮作業不會保留資料庫中索引的片段狀態,它通常會使片段增加到某個程度。 這是不要反覆壓縮資料庫的另一個原因。

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

權限

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

備註

正在進行的壓縮作業可能會封鎖資料庫上的其他查詢,也可能會被正在進行的查詢封鎖。 在 SQL Server 2022(16.x)引入的縮小資料庫操作中,提供了WAIT_AT_LOW_PRIORITY的選項。 這項功能是 DBCC SHRINKDATABASEDBCC SHRINKFILE 額外新增的選項。 如果在 WAIT_AT_LOW_PRIORITY 模式中的新縮小操作因長時間執行的查詢而無法取得必要的鎖定,縮小操作最終會在一分鐘後逾時,並無提示地結束,避免阻塞其他查詢。 如需詳細資訊,請參閱 DBCC SHRINKDATABASE

如需有關檔案管理和 Azure SQL 資料庫特定壓縮作業的詳細資訊,請參閱管理 Azure SQL 資料庫的資料庫空間

使用 SQL Server Management Studio

適用於:SQL Server、Azure SQL 受控執行個體

壓縮資料庫

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

  2. 展開 資料庫,然後在想要壓縮的資料庫上按滑鼠右鍵。

  3. 指向 [工作]、[壓縮],然後選取 [資料庫]

    • 資料庫

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

    • 目前配置的空間

      顯示所選資料庫的已使用和未使用空間總計。

    • 可用空間

      顯示所選資料庫的記錄檔和資料檔案中的可用空間總和。

    • 在釋出未使用的空間之前重新整理檔案

      選取此選項相當於執行 DBCC SHRINKDATABASE 指定目標百分比選項。 清除此選項相當於使用 DBCC SHRINKDATABASE 選項執行TRUNCATEONLY。 根據預設,開啟對話方塊時不會選取此選項。 如果選取此選項,使用者必須指定目標百分比選項。

    • 壓縮之後檔案中的可用空間上限

      輸入壓縮資料庫之後,資料庫檔案所要保留的可用空間百分比上限。 允許的值介於 0 到 99 之間。

  4. 選取 [確定]。

使用 Transact-SQL

壓縮資料庫

  1. 連線至資料庫引擎。

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

  3. 複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。 這個範例會使用 DBCC SHRINKDATABASE (Transact-SQL) 來減少資料庫中數據和記錄檔 UserDB 的大小,並允許資料庫中的 10 可用空間百分比。

DBCC SHRINKDATABASE (UserDB, 10);
GO

壓縮資料庫之後

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