默认网络数据包大小的差异:SqlConnection与SQL Server默认值

Iro*_*n84 10 .net sql-server packet

我昨天注意到,.NET SqlConnection类中的默认网络数据包大小与SQL Server本身的默认网络数据包之间存在明显差异.

对于SqlConnection班级的PacketSize财产,按此链接:

网络数据包的大小(以字节为单位).默认值为8000.

在该文章的先前版本中,它提到(一直回到.NET 1.1)默认值为8192字节.但是对于SQL Server(根据此链接):

默认数据包大小为4,096字节.

从那篇文章看,这至少是SQL Server 2005的默认设置.有谁知道它们之间存在这种差异的原因?

更新:为了给这个问题增加更多的乐趣,我一直在和Thomas LaRock(他碰巧是一个SQL MVP)交谈,他告诉我,在SQL Server 2000中,默认的网络数据包大小实际上是8192字节(比如.NET 1.1!).但是,它在以后的版本中发生了变化,因为它造成了多少碎片,需要每周重新启动服务器.

那么为什么SQL Server将它减少一半,但.NET只减少了192个字节?有没有什么东西迫使SQL Server只使用2的倍数?

Kin*_*hah 2

情况一直如此。即使在SQL 7.0和 SQL Server 2000 中,默认值也是 4096 字节

当您尝试使用高于 8060 字节的网络内存时,就会出现此问题,因为它将要求 SQL Server 从使用 384 MB 大小的内存区域中分配内存。

从客户端应用程序端修改数据包大小非常容易。在连接字符串中,您只需设置packet size=4096.

建议不要修改运行 SQL Server 的服务器上的默认网络大小,除非您正在使用 SSIS 执行一些繁重的工作,或者您的应用程序正在执行批量复制操作、发送和接收 BLOB 数据。

请注意,SybaseASE 使用 512 字节作为默认数据包大小,因此 SQL Server 6.5 可能会将其设置为默认值(但我没有参考文献来引用 SQL 6.5 是否是这种情况)。

请参阅:网络数据包大小:摆弄或不摆弄