SQL Server 连接字符串上的网络数据包大小可提高吞吐量

SQL Server 连接字符串上的网络数据包大小可提高吞吐量

我们有一个数据加载作业,它在两个 SQL 服务器之间通过网络移动相对大量的数据。服务器位于同一个子网上,并且它们之间只有一个交换机。数据由几个大的 varchar 字段和一个 xml 字段组成。

为了提高吞吐量。我尝试将连接字符串上的网络数据包大小从默认的 4096 更改为 32627;但是这似乎对性能没有帮助。我怀疑问题是虽然我们正在运行千兆以太网,但“巨型帧”未启用。

为了确认这一点,我尝试了两次 ping 测试:

ping -l 1400 -f pdbsql01dul

作品

ping -l 4096 -f pdbsql01dul

数据包需要分片但设置了 DF。

你可以看到,最大的数据包大小似乎在 1400 左右

我的问题是,如果巨型帧约为 8096,那么将网络数据包大小设置得大于该大小有什么好处吗?

如果连接是本地连接,这种情况会改变吗?

答案1

需要发生的是,以太网上的 MTU 设置需要从 1500 增加到 4096 以上。这些设置通常在驱动程序设置页面上设置。为了实现良好的网络,您确实希望同一以太网上的所有设备(包括所有以太网交换机)都具有相同的 MTU 设置。

我的其中一台服务器上的巨型框架设置
(来源:系统管理员1138.net

您可以在我的其中一台服务器上进行更改。

这能起到作用吗?当然可以。数据包碎片越少,意味着 TCP 堆栈重组流量的工作量就越少。这可能不是数量级上的提升,但确实可以起到作用。

我认为,服务器本地的连接使用管道而不是 TCP 连接,可能不受此更改的影响。

答案2

你可以尝试,但我怀疑它不会有太大帮助。TDS 作为一种协议从来就不是为高吞吐量而设计的。如果你想在两个 SQL 服务器实例之间移动数据,你可以考虑使用服务代理相反,它的网络堆栈比 TDS 更注重高吞吐量。这就是镜像选择 SSB 网络堆栈与备用镜像服务器通信的原因。此外,SSB 的数据移动语义比链接服务器好得多,通常也比自定义客户端应用程序好。

答案3

我无法对 tcp、帧等发表评论,但我只为一些仍然需要 SQL 6.5 客户端工具的恶意应用程序设置过一次 SQL Sever 网络数据包大小。

这是那些“不要这样做”的设置之一。

相关内容