Sql server 如何最小化SQL复制中的数据

Sql server 如何最小化SQL复制中的数据,sql-server,performance,replication,Sql Server,Performance,Replication,我想将数据从海上船只复制到陆上站点。连接有时是通过卫星链路进行的,可能会很慢,并且延迟很高 在我们的应用程序中,延迟很重要,岸上的人应该尽快获得数据 有一个表正在被复制,由id、datetime和一些长度可能不同的二进制数据组成,通常小于50字节 离岸应用程序不断地将数据(硬件测量)推送到表中,我们希望这些数据尽可能快地放在岸上 在MS SQL Server 2008中是否有任何技巧可以帮助降低带宽使用率和延迟?初始测试使用100 kB/s的带宽。 我们的替代方案是进行我们自己的数据传输,这里的

我想将数据从海上船只复制到陆上站点。连接有时是通过卫星链路进行的,可能会很慢,并且延迟很高

在我们的应用程序中,延迟很重要,岸上的人应该尽快获得数据

有一个表正在被复制,由id、datetime和一些长度可能不同的二进制数据组成,通常小于50字节

离岸应用程序不断地将数据(硬件测量)推送到表中,我们希望这些数据尽可能快地放在岸上

在MS SQL Server 2008中是否有任何技巧可以帮助降低带宽使用率和延迟?初始测试使用100 kB/s的带宽。


我们的替代方案是进行我们自己的数据传输,这里的初始原型设计使用10 kB/s的带宽(同时在相同的时间跨度内传输相同的数据)。这是没有任何可靠性和完整性检查,所以这个数字是人为的低

我建议在SQL Server之外进行动态压缩/解压缩。也就是说,SQL通常会复制数据,但网络堆栈中的某些内容会进行压缩,因此它要小得多,并且带宽效率高

我什么都不知道,但我确信这些是存在的


不要直接处理SQL文件。如果不是不可能的话,那就是疯狂。

您是否希望总是只有一个表被复制?是否有很多更新,或者只是插入?复制是通过为每个更改的行在目标上调用insert/update存储过程来实现的。一种廉价的优化方法是强制存储过程名称变小。默认情况下,它是由表名组成的,但是IIRC您可以为项目强制使用不同的存储过程名称。如果一行插入大约58个字节,则在存储过程名称中保存5或10个字符非常重要

我猜如果你更新二进制字段,它通常是一个完整的替换?如果这是不正确的,您可能会改变一小部分,您可以推出自己的差异修补机制。可能是第二个表,其中包含对原始数据的字节更改的时间序列。听起来很痛苦,但根据您的工作负载,可以节省大量带宽更改


插入通常是按逻辑批次进行的吗?如果是这样的话,您可以将一批插入作为一个定制的blob存储在复制表中,并有一个辅助进程将它们解压到您想要使用的最终表中。这将减少通过复制的这些小行的开销。

您可以尝试不同的复制配置文件或创建自己的复制配置文件。针对不同的网络/带宽场景优化了不同的配置文件


MSDN谈论复制配置文件。

您是否考虑过购买WAN加速器设备?我太新了,不能在这里发布链接,但是有几个可用的链接


本质上,发送端的设备压缩输出数据,接收端解压缩数据,这一切都是动态的,完全不可见的。这样做的好处是提高了流量的表观速度,并且不需要您更改服务器配置。它应该是完全透明的

我拉我的答案:)不确定'没有使用MSSQL太多'是足够的警告,停止离岸'为什么它被破坏'电话后:坑只是一个表,只是插入。插入是连续的,我不希望存储它们,然后批量发送,因为这可能会增加延迟,这与我试图做的相反。