默认情况下在日志复制中如果新增加Article那么需要产生一个包含所有Article的Snapshot。由于产生Snapshot会加锁,同时会产生IO操作,所以对于大的数据库性能影响是很大的。
可以通过下面的办法让SQL Server针对增加的Article产生Snapshot。
1. Disable 'immediate_sync' 'allow_anonymous'选项(默认都是开启的)。
–在发布数据库运行下面的代码(pub_AdventureWorksDW为发布名称)
EXEC sp_changepublication@publication='pub_AdventureWorksDW',@property='allow_anonymous',@value='false'
EXEC sp_changepublication@publication = 'pub_AdventureWorksDW',@property='immediate_sync',@value='false'
GO
2. 在发布数据库运行sp_helpsubscription确保immediate_sync和allow_anonymous值为0.
3. 在发布中增加新的Article(test4).
4. 使用sp_helpsubscription 可以看到新增的Article还没有Active.(subscription status 订阅状态:0 = 不活动1 = 已订阅 2 = 活动)
5. 启动Snapshot Agent同步化新增的Article.
6. 可以看到Snapshot指产生了一个Article,而不是所有的。新Article订阅的状态已经变为2(Active)
7. 在订阅服务区看到新增的Article已经存在了。