表模式会影响事务复制性能

时间:2017-03-15 14:07:35

标签: sql-server sql-server-2012 database-replication transactional-replication

我们已经在WAN上实现了事务复制(推送模型),并且有时在特定表的批量更新期间看到减速(即我们看到针对该特定表的大量“命令未被复制”) 。有问题的表格格式为

CREATE TABLE [Table](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [FrequentlyUpdated_0] [float] NULL,
    [FrequentlyUpdated_1] [float] NULL,
    [FrequentlyUpdated_2] [float] NULL,
    [RarelyUpdated_0] [varbinary](max) NULL,
    [RarelyUpdated_1] [varbinary](max) NULL,
    [RarelyUpdated_2] [varbinary](max) NULL
)

其中 RarelyUpdated_n 列可以包含相对于 FrequentlyUpdated_n 列非常大的数据(例如,20 MB)。现在的问题是,如果我们将有问题的表分成两个不同的表,如下面的

,它是否可能会提高性能
CREATE TABLE [FrequentlyUpdatedTable](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [FrequentlyUpdated_0] [float] NULL,
    [FrequentlyUpdated_1] [float] NULL,
    [FrequentlyUpdated_2] [float] NULL
)

CREATE TABLE [RarelyUpdatedTable](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [RarelyUpdated_0] [varbinary](max) NULL,
    [RarelyUpdated_1] [varbinary](max) NULL,
    [RarelyUpdated_2] [varbinary](max) NULL
)

或者以另一种方式表达:性能取决于行数据大小还是仅取决于更新数据的大小?

PS。设置中涉及的所有服务器都没有大量加载,因此我怀疑性能问题与I / O有关。

1 个答案:

答案 0 :(得分:1)

  

性能是取决于行数据大小还是仅取决于更新数据的大小?

事务复制通过读取事务日志来工作。当读取该日志时,它将尝试过滤掉标记为要复制的文章的记录,并将表单上的那些文件发送到INS / DEL / UPD命令给分发者

将表分成两个表以减少将传输给分发服务器的数据大小不会有帮助,因为当您更新时,SQL不会传输整行,而只会将部分更改为UPD命令

您必须先排除故障,复制拓扑中的瓶颈首先要对瓶颈有更多了解。

有很多方法可以识别瓶颈。

1.Tracer令牌: 您可以插入tracer tokens来监控流程

enter image description here

2.确认延迟后,您可以通过记录其操作来解决个人代理问题

How to enable replication agents for logging to output files in SQL Server

3.最后,您还可以调整设置。例如,如果您已经识别出日志阅读器在一个命令中对少数事务进行分组,并且您想要更改它以测试和改善延迟。您也可以在这里调整设置

Enhance Transactional Replication Performance