原文地址:
原文作者:stéphane haby
今天,在一个新客户现场,我看到msdb数据文件超过4gb。有点太大了…
-
为了查看是哪张表占用这么大的空间,我们可以在ssms中选择msdb数据库,右键点击->报告(reports)->标准报告(standards reports)->按"热门表"划分的磁盘使用情况(disk usage by top tables)
-
如上图可见,表dbo.sysmainplan_logdetail是大小为2.3gb且包含13205条记录的大表。
此表是通过ssms中管理菜单中的维护计划向导生成的维护计划的日志。更多信息请点击这里:。
在谷歌搜索如何清除此表之后,发现很多文章描述了对表进行的截断操作的方法。
我不确定这是不是能解决此问题的好方法…
- 根据我的经验,要清除msdb中的日志或历史记录,我们需要一个存储过程,比如sp_delete_backuphistory或sp_purge_jobhistory。
- 在数据库msdb中的所有存储过程中搜索,最后找到“sp_maintplan_delete_log”。
- 我也在微软文档中搜索,在找到的只有下图中标注的这句话。
- 为了清理此表dbo.sysmainplan_logdetail,我在带有时间戳的循环中使用此存储过程,不填充t-log文件,只保留最后30天:
declare @date datetime, @sql nvarchar(1000)
set @date = convert(nvarchar(10), getdate()-720 , 21)
while @date <= convert(nvarchar(10), getdate()-30 , 21)
begin
set @sql = n'exec [msdb].[dbo].[sp_maintplan_delete_log] @oldest_time = {ts''' convert(nvarchar(23), @date , 21) n'''}'
exec(@sql)
set @date = @date 30
print @sql
end
4. 上图中可以看到,在2020年1月之前有5709个记录…😳
清理后,表dbo.sysmainplan_logdetail的记录数从13205减少到152,且文件大小从2.3gb减小到35mb,如下图:
为了完整起见,最好的做法是执行与microsoft文档中相同的操作,即使用存储过程sp_purge_jobhistory,sp_delete_backuphistory。
我还建议创建一个日常任务来清理维护计划中所有的历史记录。😎
最后修改时间:2022-05-09 10:36:29
【米乐app官网下载的版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。