.net 当通过网络发送SQL Server数据时,它是以何种格式序列化的?

.net 当通过网络发送SQL Server数据时,它是以何种格式序列化的?,.net,sql-server,performance,.net,Sql Server,Performance,我问这个问题的原因是因为我们计划从SQL Server数据库读取大量(数GB)数据到.Net应用程序进行处理。我想知道每个记录要计算多少空间开销,以估计对网络流量的影响 例如,一条记录由5个整数组成(即4*5=20字节的数据)。每个记录物理传输多少字节?是否有一个精确的公式或经验法则?我对实际的格式没有任何线索,但我建议使用一种经验方法,自己连接和测量数据。SQL Server使用。及 坦白地说,我不会担心的。GBs的数据将需要时间,不管它是如何不幸地完成的。正如Peter M所说,测试它 没有

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


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

我对实际的格式没有任何线索,但我建议使用一种经验方法,自己连接和测量数据。

SQL Server使用。及


坦白地说,我不会担心的。GBs的数据将需要时间,不管它是如何不幸地完成的。

正如Peter M所说,测试它

没有一个真正的计算,你可以执行,这将给你足够的信息来工作

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

NIC涉及的实际传输速率是多少?请注意,此费率将根据网卡的位置以及这些网卡使用的驱动程序而有所不同。您可以很容易地拥有1Gb卡,由于驱动程序问题,该卡只能以300Mb的速度传输。我甚至见过两个完全相同的制造商生产的具有相同驱动程序的卡,由于其中一个卡的配置稍有不同,因此传输速度也不同

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

你还必须考虑在传输时的现有网络“天气”,什么是来自其他网络流量的吞吐量,这将是共享的。这将是一个暂时的因素,因为现有的网络负载随着不同的需求而变化

此外,一些nic支持TCP卸载,其他nic不支持。如果您的nic没有这样做,那么有效的传输速率将受到这些机箱上的CPU正在执行的任何其他操作的阻碍

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


关键是,您必须对其进行测试,最终,SQL server使用的协议对您的发现并不重要。不要只运行一个测试,运行很多真实世界的测试。只有这样,你才能得出一个平均数;这可能仍然是关闭的,这取决于当时发生的任何事情,但您应该能够在10%以内。根据我的观察,标准SQL命令会导致大量往返。因此,对于传输大量数据,如果您可以将其重新表述为上载一个表,则会有所帮助。然后您可以使用大容量复制操作,这将更加高效。请参阅:和。

实际上,TDS协议是一个非常慢的协议。SQL Server是为处理数据而优化的,而不是为处理大量数据而优化的。虽然表示开销不大,但由于它是一个请求-响应协议,而且缺少boxcaring,因此与专用的高吞吐量协议相比,它的速度相当慢,即使在SQL Server内部(如数据库镜像或Service Broker协议)。但即便如此,由于TDS的运行速度非常慢,SQL Server通过TDS管道全速运行会使您的.Net客户机负担过重,这是有保证的


总的来说,如果你来问一个像你所问的那样的问题,那就意味着你做错了

这是一个有用的评论,不是答案。@Manu-根据Chris的回答,网络是许多系统的复杂交互。因此,从协议规范中准确预测您的具体实现将如何反应是不可能的。测量一些东西会得到真实世界与理论数字的对比,在某个阶段,你必须测量网络,以验证你在设计中所做的所有假设。实际上,如果你传输5个整数,你将得到8092字节的传输-总是这样。SQL Server被组织成8K的页面-您永远不会得到少于8K的块。@marc_s:您是否考虑IO和内存?@gbn:这-另外,如果您碰巧有一个不正确的布局,您可能会使用4100字节的8K页面,因此您将有近50%的“空闲”/empty space每次调用都会出现。最后一点您可能想看看这篇文章:谢谢,指向“表格数据流协议规范”的MSDN链接非常有用(尽管它有154页,非常详尽!)大容量复制操作仅在写入sql server时才相关,而不是在从sql server读取数据时it@Manu:是的。写作时的表现差异很大。但我也看到了阅读速度的大幅提升。我想这取决于你的情况。