我们已经在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有关。
答案 0 :(得分:1)
性能是取决于行数据大小还是仅取决于更新数据的大小?
事务复制通过读取事务日志来工作。当读取该日志时,它将尝试过滤掉标记为要复制的文章的记录,并将表单上的那些文件发送到INS / DEL / UPD命令给分发者
将表分成两个表以减少将传输给分发服务器的数据大小不会有帮助,因为当您更新时,SQL不会传输整行,而只会将部分更改为UPD命令
您必须先排除故障,复制拓扑中的瓶颈首先要对瓶颈有更多了解。
有很多方法可以识别瓶颈。
1.Tracer令牌: 您可以插入tracer tokens来监控流程
2.确认延迟后,您可以通过记录其操作来解决个人代理问题
How to enable replication agents for logging to output files in SQL Server
3.最后,您还可以调整设置。例如,如果您已经识别出日志阅读器在一个命令中对少数事务进行分组,并且您想要更改它以测试和改善延迟。您也可以在这里调整设置