壓縮資料庫

適用於: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. 指向 [工作]、[壓縮],然後選取 [資料庫]

    • Database

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

    • 目前配置的空間

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

    • 可用空間

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

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

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

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

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

  4. 選取 [確定]。

使用 Transact-SQL

壓縮資料庫

  1. 連線至資料庫引擎。

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

  3. 複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。 此範例會使用 DBCC SHRINKDATABASE 來減少 UserDB 資料庫中資料和記錄檔的大小,並允許資料庫中 10% 的可用空間。

DBCC SHRINKDATABASE (UserDB, 10);
GO

壓縮資料庫之後

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