SQL Server数据在通过网络发送时序列化的格式是什么?

时间:2010-06-29 20:22:22

标签: .net sql-server performance

我问这个问题的原因是因为我们计划从SQL Server数据库中读取A LOT(几GB)的数据到.Net应用程序进行处理。我想知道为每个记录计算多少空间开销来估算对网络流量的影响。

E.g。一个记录由5个整数组成(这使得4 * 5 = 20个字节的数据)。每条记录物理传输多少字节?是否有精确的公式或经验法则?

5 个答案:

答案 0 :(得分:10)

SQL Server使用TDS protocol。并MSDN

坦率地说,我不担心。不幸的是,无论如何,数据的GB都需要时间。

答案 1 :(得分:4)

我对实际格式没有任何线索,但我建议采用经验方法并联系Wireshark并自行衡量数据。

答案 2 :(得分:4)

正如Peter M所说,测试它。

没有足够的计算可以执行,这将为您提供足够的信息来解决问题。

现实情况是,要考虑的变量太多。例如:

NIC涉及的实际转移率是多少?请注意,此速率将根据所使用的网卡以及这些卡正在使用的驱动程序而有所不同。您可以很容易地拥有1Gb卡,由于驱动程序问题,它只能在300Mb传输。我甚至看到同一制造商使用相同驱动器的两张卡具有不同的传输速度,因为其中一张卡的配置略有不同。

这两台机器之间还有哪些其他设备?同样,根据硬件,操作系统等,您可能会看到截然不同的数字。来自TRENDNet的100美元8端口1Gb非管理型交换机的吞吐量将与5000美元的1Gb cisco管理型交换机完全不同。

您还必须考虑传输时的现有网络“天气”。来自其他网络流量的吞吐量与此共享的相同线路的吞吐量是多少。这将是一个瞬态因素,因为现有网络负载随着对它的不同需求而变化。

此外,一些nic支持TCP卸载,其他则不支持。如果你的黑客没有,那么这些盒子上的CPU正在做的其他任何事情都会妨碍有效的传输速率。

接下来,必须考虑硬盘驱动器。考虑到这是大量数据,那么各种硬盘的读写速度将产生影响。当然,网络实际上可以以90%的效率运行,但如果您正在谈论大量数据,那么硬盘驱动器本身可能无法跟上,从而导致其降低到25%或更低的效率。

重点是,您必须对其进行测试,并且在一天结束时,SQL服务器使用的协议对您的发现无关紧要。并且不要只运行一个测试,运行很多的实际测试。只有这样你才能想出一个平均水平;根据当时正在发生的其他情况,这可能仍然会被取消,但你应该可以说是10%。

答案 3 :(得分:0)

根据我的观察,标准SQL命令会导致很多往返。因此,对于传输大量数据,如果您可以将其重新添加为上传一个表,则会有所帮助。然后,您可以使用批量复制操作,这样效率更高。请参阅:Bulk Copy Operations in SQL Server (ADO.NET)bcp Utility

答案 4 :(得分:0)

实际上,TDS协议是一种极其缓慢的协议。 SQL Server针对processign数据进行了优化,而不是为来回调整大量数据。虽然表示开销并不大,但是与专用高吞吐量协议相比,即使在SQL Server(如数据库镜像或Service Broker协议)中,请求 - 响应协议和缺少盒装的事实使得它非常慢。但即便如此,由于TDS速度很慢,因此通过TDS管道全速拍摄的SQL Server将保证您的.Net客户端过载。

总的来说,如果你曾经问过一个类似问题的问题,那就意味着你做错了。