jla*_*don 1 sql-server storage transaction-log
环境是 SQL Server 2014 Enterprise Edition,由 CommVault Simpana 管理的 NetApp 存储。我们在一个实例上设置了 100 个 dbs,所有 TLog 都在同一个卷上。
SAN 管理员每天设置 4 次 TLog 备份,每晚对 TLog 备份卷进行一次完整快照。保留期为 14 天,因此 TLog 备份卷在任何时候都有 14 个 TLog 快照。
最近,TLog 备份卷几乎耗尽空间,因为完整快照正在快速增加。我们将此归因于年终数据处理,导致大量块更改。预计这种上涨不会持续,但事实并非如此。
SAN 管理员表示,他无法知道哪些 TLog 文件导致了块更改的增加以及更大的快照。
我知道文件和块之间存在脱节,但我认为您可以通过 Simpana、NetApp 或 PowerShell 连接这些点,以找出导致大块更改的 TLog。
任何建议,将不胜感激。
谢谢
好消息!您无需查询 Simpana、NetApp 或 PowerShell 即可找出日志文件大小发生变化的位置。
只需查询 msdb.dbo.backupset 表 - 它会跟踪数据库名称、备份日期/时间和备份大小。你可以随着时间的推移趋势这一点。我喜欢用 Excel 或 SSRS 绘制此图表以显示数量趋势,然后我可以深入了解详细信息,以确切了解是哪个备份导致了它。
下面的查询显示数据透视中的完整备份大小 - 0 列是当前月份,-1 是上个月,-2 是两个月前,等等。请注意,我正在过滤 file_type = D - 那是完整备份。如果您愿意,您可以为差异备份或日志备份切换不同的过滤器。
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
DECLARE @startDate DATETIME;
SET @startDate = GETDATE();
SELECT PVT.DatabaseName ,
PVT.[0] ,
PVT.[-1] ,
PVT.[-2] ,
PVT.[-3] ,
PVT.[-4] ,
PVT.[-5] ,
PVT.[-6] ,
PVT.[-7] ,
PVT.[-8] ,
PVT.[-9] ,
PVT.[-10] ,
PVT.[-11] ,
PVT.[-12]
FROM ( SELECT BS.database_name AS DatabaseName ,
DATEDIFF(mm, @startDate, BS.backup_start_date) AS MonthsAgo ,
CONVERT(NUMERIC(10, 1), AVG(BF.file_size / 1048576.0)) AS AvgSizeMB
FROM msdb.dbo.backupset AS BS
INNER JOIN msdb.dbo.backupfile AS BF
ON BS.backup_set_id = BF.backup_set_id
WHERE NOT BS.database_name IN ( 'master', 'msdb', 'model', 'tempdb' )
AND BF.[file_type] = 'D'
AND BS.backup_start_date BETWEEN DATEADD(yy, -1, @startDate)
AND @startDate
GROUP BY BS.database_name ,
DATEDIFF(mm, @startDate, BS.backup_start_date)
) AS BCKSTAT PIVOT ( SUM(BCKSTAT.AvgSizeMB) FOR BCKSTAT.MonthsAgo IN ( [0], [-1], [-2], [-3], [-4], [-5], [-6], [-7], [-8], [-9], [-10], [-11], [-12] ) ) AS PVT
ORDER BY PVT.DatabaseName;
GO
Run Code Online (Sandbox Code Playgroud)