Sql-Server
DBCC 收縮文件歷史
我通過 GUI 執行收縮文件(.mdf),方法是選擇任務 -> 收縮 -> 文件並選擇第二個選項,即在釋放未使用空間之前重新組織頁面。現在,我想知道我針對 50dbs 執行的壓縮文件命令的歷史。例如以下
- 它回收了多少空間
- .mdf 文件空間在執行收縮文件命令之前和之後。
謝謝
SQL Server 本身不會保留這種類型的歷史記錄。但是,您可以通過查詢 msdb 中的備份歷史表並比較收縮前後完整備份的大小來獲得一些資訊。
東風
預設跟踪包含有關所有 DBCC 命令的一些有限資訊,包括收縮。使用Aaron Bertrand 的查詢作為起點,我們可以確定哪個數據庫被收縮,然後查看它最近的一些備份歷史記錄。
WITH p as ( SELECT [path] = REVERSE ( SUBSTRING ( p, CHARINDEX ( N'\', p ), 260 ) ) + N'log.trc' FROM ( SELECT REVERSE(t.[path]) FROM sys.traces AS t WHERE t.is_default = 1 ) s (p) ) SELECT t.TextData, ShrunkenHead = SUBSTRING ( t.TextData, CHARINDEX ( '''', t.TextData ) + 1, CHARINDEX ( '''', t.TextData, CHARINDEX ( '''', t.TextData ) + LEN('''') ) - LEN('''') - CHARINDEX ( '''', t.TextData ) ), t.NTUserName, t.NTDomainName, t.HostName, t.ApplicationName, t.LoginName, t.Duration, t.StartTime, t.EndTime, t.Reads, t.Writes, t.CPU, t.Success, t.ServerName, t.DBUserName, t.LoginSid, t.SessionLoginName INTO #p FROM p CROSS APPLY sys.fn_trace_gettable ( p.[path], DEFAULT ) AS t WHERE t.EventClass = 116 AND t.TextData LIKE 'DBCC SHRINK%';
您需要做一些練習來解析 DBCC 命令,因為在跟踪中記錄的數據庫是命令執行的數據庫,而不是執行的數據庫。
請注意,我包含了跟踪中的一些列,我相信這些列對於收縮將始終為 NULL,但它也可能與我在跟踪中生成測試數據所做的事情有關,這使得它們不太有用。如果它們對您來說也為 NULL,那麼您的陪伴很好。但我不能讓它們更有用。
如果您需要幫助了解我的查詢中的字元串解析做了什麼,您可以在此處查看我的文章。
一旦我們將它隱藏在#temp 表中,我們就可以查看數據庫的完整備份歷史記錄。
SELECT p.*, bs.* FROM #p AS p OUTER APPLY ( SELECT TOP (20) bs.backup_start_date, bs.backup_finish_date, bs.backup_size, bs.compressed_backup_size FROM msdb.dbo.backupset bs WHERE bs.name = p.ShrunkenHead AND bs.type = 'D' ORDER BY bs.backup_finish_date DESC ) AS bs ORDER BY p.ShrunkenHead, p.StartTime DESC;
這樣,您就可以了解數據庫備份大小是如何變化的。我包括正常尺寸和壓縮尺寸,以防萬一。