Sqlserver distribution数据库文件大,清理MSrepl_commands表后恢复正常

官方文档https://docs.microsoft.com/zh-cn/sql/relational-databases/system-tables/msrepl-commands-transact-sql?view=sql-server-ver15

巡检发现distribution库的数据文件暴大,其中表MSrepl_commands占用了近100GB文件大小,该表是会被自动清理的,清理的job就是"Distribution clean up: distribution",检查下来发现该job正常运行,该job的代码就是 use distribution;EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = 72;自动清理72小时前的数据,推测可能是最近72小时内产生了太多的数据,手工执行清理36小时前的数据,use distribution;EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = 36;手工清理后表MSrepl_commands的数据减少到了10GB,distribution库的数据文件大小正常了

查询distribution下面哪些表占用空间的sql语句
use distribution;
GO
select top 10 a.tablename,a.SCHEMANAME,sum(a.TotalSpaceMB) TotalSpaceMB,sum(a.RowCounts) RowCounts
from (
SELECT
t.NAME AS TableName,
s.Name AS SchemaName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,
CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
GROUP BY
t.Name, s.Name, p.Rows) a
GROUP BY a.tablename,a.SCHEMANAME
order by sum(a.TotalSpaceMB) desc

清理前
在这里插入图片描述
执行清理,use distribution;EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = 36
清理后
在这里插入图片描述

おすすめ

転載: blog.csdn.net/lusklusklusk/article/details/113551582