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

15
我昨天注意到,在.NET的SqlConnection类和SQL Server本身中,默认的网络数据包大小有明显的差异。
对于SqlConnection类的PacketSize属性,根据此链接
“网络数据包的大小(以字节为单位)。默认值为8000。”
在该文章的早期版本中,它提到(一直到.NET 1.1)默认值为8192字节。然而,对于SQL Server(根据此链接):
“默认数据包大小为4,096字节。”
从那篇文章中可以看出,这至少是自SQL Server 2005以来的默认设置。有人知道它们之间差异的原因吗?

更新:为了增加这个问题的趣味性,我与 SQL MVP(Thomas LaRock)进行了交谈,他提到在 SQL Server 2000 中,默认的网络数据包大小实际上是8192字节(就像 .NET 1.1!)。但是由于它引起了太多的碎片化,需要每周重新启动服务器,因此后来的版本中进行了更改。

那么为什么 SQL Server 把它减少了一半,而 .NET 只减少了 192 字节?是否有某些原因强制要求 SQL Server 仅使用这个数字的倍数?


碎片化是指什么? - Martin Smith
很遗憾,我认为你在这里不会找到最佳答案。问题的目的是什么?历史/民间知识?这些尺寸是根据可能在大多数情况下最好的设置。如果您正在进行批量上传,则使用较大的值更好(注意网络MTU)。我只能提出可能对实际答案没有太大帮助的问题。 - ripvlan
1个回答

2
这一直是这样的。即使在 SQL 7.0 和 SQL Server 2000 中,默认值为4096字节

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

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

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

请注意,SybaseASE使用512字节作为默认数据包大小,因此SQL Server 6.5可能已将其设置为默认值(但我没有参考可以引用是否适用于SQL 6.5)。

参考:网络数据包大小:是否需要调整大小


1
我理解这一点,但我想知道为什么.Net与基本的SQL不同。 - Corey Adler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接