Sql-Server

將 nvarchar 值設置為 null 後如何回收 Azure SQL Server 上的數據庫空間

  • September 20, 2017

Azure SQL Server 數據庫面臨數據庫空間挑戰。使用 500 GB 中的 490 GB。這就是我從 Azure 門戶網站上漂亮的餅圖中看到的內容。請注意,本地使用的某些技術不適用於 Azure SQL Server 數據庫。

最大的表是DidbStudySerumLevelDeviation.

exec sp_spaceused 'RulesEngine.DidbStudySerumLevelDeviation '

返回

+------------+------------------------------+ | name | DidbStudySerumLevelDeviation | | rows | 20 805 409 | | reserved | 133 332 840 KB | | data | 123 079 792 KB | | index_size | 9 772 192 KB | | unused | 480 856 KB | +------------+------------------------------+

表定義: CREATE TABLE [RulesEngine].[DidbStudySerumLevelDeviation]( [Id] [uniqueidentifier] NOT NULL, [PatientTherapyId] [uniqueidentifier] NOT NULL, ... [Abstract] [nvarchar](max) NULL, ... CONSTRAINT [PK_RulesEngine.DidbStudySerumLevelDeviation] PRIMARY KEY CLUSTERED ( [Id] ASC, [PatientTherapyId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ) 主鍵上存在聚集索引。還有一些非聚集索引。抽象列數據佔用大約 90% 的表空間。

執行過程以將不必要的Abstract列數據設置為空。這應該將有問題的列“權重”減少到 10%。但是,這不會減少數據庫大小。如何回收該數據庫空間?

也許我應該等待一些 Azure SLQ 維護魔法發生?不過,這聽起來像是一廂情願的想法。

關於可能的重複

這個問題的答案可能是我特定於SQL Server 的Azure部署。Azure 門戶中報告的或讀取的數據庫大小下降exec sp_spaceused並沒有改變。

請對所有索引進行碎片整理。如本文所述,碎片化可以佔用大量空間。

執行 sp_helpfile 以驗證日誌也沒有佔用空間。如果日誌很大,請執行以下語句來恢復空間。

DBCC SHRINKFILE (log, 0)

這個執行緒上,我提供了一些可能對數據庫大小有用的查詢。

希望這可以幫助。

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