ITPub博客

首页 > 数据库 > SQL Server > (SQL 2008R2)Transaction replication caused blocking issue

(SQL 2008R2)Transaction replication caused blocking issue

原创 SQL Server 作者:sail_gu 时间:2014-03-24 21:25:58 0 删除 编辑
Environment: Automation系统transaction database,SQL Cluster 'HZXL1\HZXL1',SQL 2008R2 Enterprise Edition 64bit(10.50.4276)
详情:SQL Server 发出blocking警报,检查发现是-Replication job *Distribution clean up: distribution* 阻挡transaction agent,致使新数据插入至distribution数据库缓慢,报表数据delay.并且job *Distribution clean up: distribution*运行时间比之前缓慢许多(平常是几秒钟,当前是2-4分钟),数据库distribution持续增长(因数据库每天的增长量是3GB左右,所以ditribution的增长很迅速)...
由于只是报表数据延迟,并未对生产造成影响,且存储暂时没有空间压力,所以此异常的紧急度定义级别并不高.
检查最近的更新记录,发现美国同事新增了一个事务类型的replication,而自此change升效后出现当前的异常,检查此新增的replication发现参数"Immeidate_Sync"为true,与已经存在的replication参数值不同.更正后,relication恢复正常,distribution数据库中的数据被快很清理掉,
但因这几十GB的已经扩展出来空间对于我们并未造成任何影响,故至今并未对distribution进行收缩.

下面再来说说参数"Immeidate_Sync"比较常用的地方或实用的地方(更细节的东西并没有去研究...),当我们使用向导建立事务replication时,参数 'allow_anonymous''immediate_sync'会默认设置为true,这样的设置有其不方便的地方-比如,当我们对已经存在的事务型replication增加,减少或变更一个表(article)时,做snapshot时,会对所有已经存在的article全部做snapshot,这样无疑会加重server的负担,而像我们这种上T的几乎全部复制到报表服务器的数据库是灾难性的,将以下两个参数设置成"false"后,只会对变更的article做snapshot,这样无疑会大大节省数据同步的时间,因此我们目前建立事务型replication的标准是一定要将以下两个参数设置成"false":
*************

EXEC sp_changepublication
@publication = 'your_publication_name',
@property = 'allow_anonymous',
@value = 'false'
GO

EXEC sp_changepublication
@publication = 'your_publication_name',
@property = 'immediate_sync',
@value ='false'
GO
*************


Ref:
http://blogs.msdn.com/b/apgcdsd/archive/2012/09/07/10347168.aspx
http://www.replicationanswers.com/TransactionalOptimisation.asp


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7736490/viewspace-1128700/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2011-02-12

  • 博文量
    2
  • 访问量
    6779