关于清理distribution数据库过期数据
程序员文章站
2022-06-30 08:14:21
关于清理distribution过期数据
做过replication的人都知道,distribution数据库会不断的增大,特别是操作平凡,数据增长是相当吓人的。...
关于清理distribution过期数据
做过replication的人都知道,distribution数据库会不断的增大,特别是操作平凡,数据增长是相当吓人的。可以一下子增加到5g以上。
当时我被吓到了。不知如何是好?重新做replication的话是可以,但是不可能每次都因为distribution数据库过大就做,这样太浪费时间。
最后,我找了很多资料,也尝试了其实很简单。只需要执行sql query就ok
select name, log_reuse_wait, log_reuse_wait_desc from sys.databases where name = 'distribution' --(shows breakout by day, by hour. took 2 hours on 350million rows, 100gb distribtuion db) select t.[publisher_database_id] ,datepart(mm,[entry_time]) 'month' , datepart(dd,[entry_time]) 'day' , datepart(hh,[entry_time]) 'hour' ,count(c.[xact_seqno]) 'count of commands' from [distribution].[dbo].[msrepl_transactions](nolock) t join [msrepl_commands](nolock) c on t.[xact_seqno] = c.[xact_seqno] group by t.[publisher_database_id] ,datepart(mm,[entry_time]) , datepart(dd,[entry_time]) , datepart(hh,[entry_time]) order by 1,2,3,4 --or, just select oldest 10 rows and note the entry_time stamp. --(select took 5 minutes on 350million rows, 100gb distribtuion db) select top 10 * from [distribution].[dbo].[msrepl_transactions](nolock) exec dbo.sp_msdistribution_cleanup @min_distretention = 0, @max_distretention = 120 sp_helptext sp_msdelete_publisherdb_trans alter procedure sp_msdelete_publisherdb_trans sp_helptext sp_msdelete_dodelete
--以上代码只需要执行第一次就ok。
--下面两行代码就是要直接执行多次,直接执行到影响的行数为0就ok了。记得要shrink distribution数据库。
delete top(20000) msrepl_commands delete top(50000) msrepl_transactions