代码之家  ›  专栏  ›  技术社区  ›  Manu JCasso

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

  •  5
  • Manu JCasso  · 技术社区  · 14 年前

    我之所以问这个问题,是因为我们计划将大量(几GB)数据从SQL Server数据库读取到.NET应用程序进行处理。我想知道为了估计对我们的网络流量的影响,每个记录需要计算多少空间开销。

    例如,记录由5个整数组成(这使得4*5=20字节的数据)。每个记录物理传输了多少字节?有精确的公式或经验法则吗?

    5 回复  |  直到 14 年前
        1
  •  10
  •   gbn    14 年前

    SQL Server使用 TDS protocol . 和 MSDN

    坦白说,我不会担心的。数据的GBS将花费时间,无论 怎样 不幸的是,它完成了。

        2
  •  4
  •   Peter M    14 年前

    我对实际的格式一无所知,但我建议采用一种经验方法,并进行连接。 Wireshark 自己测量数据。

        3
  •  4
  •   ChrisLively    14 年前

    正如彼得M所说,测试一下。

    没有一个真正足够的计算可以为您提供足够的信息。

    事实是,有太多的变量需要考虑。例如:

    NIC的实际传输速率是多少?请注意,此速率将根据安装的网卡以及这些网卡使用的驱动程序而有所不同。你可以很容易地得到一张1GB卡,因为司机的问题,它只能以300MB的速度传输。我甚至看到过同一个制造商的两张卡具有相同的驱动程序,由于其中一张卡的配置稍有不同,传输速度也不同。

    这两台机器之间还有什么其他设备?同样,根据硬件、操作系统等的不同,您可能会看到非常不同的数字。一台TrendNet提供的价值100美元的8端口1GB非网管交换机的吞吐量将与价值5000美元的1GB Cisco网管交换机完全不同。

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

    另外,有些网卡支持TCP卸载,有些则不支持。如果您的网卡不支持,那么这些机箱上的CPU所做的任何其他操作都会妨碍有效传输速率。

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

    关键是,您必须对其进行测试,到最后,SQL Server使用的协议对您的发现将无关紧要。不要只运行一个测试,运行一个 许多 真实世界的测试。只有这样,你才能得出一个平均值;这个平均值可能会根据当时的情况而有所下降,但你应该能够在10%以内。

        4
  •  0
  •   Tomek Szpakowicz    14 年前

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

        5
  •  0
  •   Remus Rusanu    14 年前

    实际上,TDS协议是一种外部缓慢的协议。SQL Server是为处理数据而优化的,而不是为前后整理成吨的数据而优化的。尽管表示开销并不很大,但事实上,请求-响应协议和缺少BoxCare使得它与专用的高吞吐量协议相比非常缓慢,甚至在SQL Server内部(如数据库镜像或Service Broker协议)。但即便如此,由于TDS的速度和实际速度一样慢,通过TDS管道全速拍摄的SQL Server将覆盖您的.NET客户端,这是有保证的。

    总的来说,如果你来问一个像你问的问题,这意味着你做错了。