DistributionDB過大的原因

1 同一個發佈庫的對象被多個發佈包(n)所包含,導致產生了n倍的數據

在發佈庫執行下面的語句,會返回被多次發佈的對象

select objid,count(*) from sysarticles group by objid having(count(*)>1) order by COUNT(*) desc

2 distribution cleanup job停止工作,導致MSrepl_commands和MSrepl_transactions數據無法被清除

3 發佈庫中的任意一個發佈的匿名訂閱屬性/立即初始化屬性爲true,這會導致全部的數據在max retention到達之前無法被刪除(具體的刪除邏輯見sp_MSdelete_publisherdb_trans)

在distributiondb執行下面的語句,找出存在匿名訂閱/立即初始化的發佈:

select a.article,p.publication from MSsubscriptions s inner join MSpublications p
on s.publication_id=p.publication_id 
inner join MSarticles a  on s.article_id=a.article_id  where subscriber_id < 0 
go
sp_helpdistpublisher

找到後在發佈庫執行以下語句即可

exec sp_changepublication @publication = 'xx' ,@property = 'allow_anonymous' , @value = false

exec sp_changepublication @publication = 'publicationTest' , @property = 'immediate_sync' , @value = false

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章