在sql server连接string上的networking数据包大小以提高吞吐量

我们有一个dataload作业,可以在两台sql server之间的networking上传输相对大量的数据。 服务器在同一个子网上,它们之间只有一个交换机。 数据由几个大的varchar字段加上一个xml字段组成。

为了增加吞吐量。 我试过将连接string的networking数据包大小从默认的4096改为32627; 但是,这似乎并没有帮助业绩。 我怀疑问题是,虽然我们运行的以太网,“巨型帧”没有启用。

为了证实这一点,我尝试了两个pingtesting:

ping -l 1400 -f pdbsql01dul

作品

ping -l 4096 -f pdbsql01dul

数据包需要被分割,但是DF被设置。

正如你所看到的,最大的数据包大小似乎在1400左右

我的问题是,如果巨帧是〜8096,那么设置networking包的大小是否有什么好处呢?

如果连接在本地服务器上,这是否会改变?

需要做的事情是以太网上的MTU设置需要从1500增加到4096以北。这些设置通常在“驱动程序设置”页面上设置。 对于良好的networking,你真的希望在同一个以太网上的所有设备(包括所有的以太网交换机)具有相同的MTU设置。

在我的一台服务器上设置巨型帧http://sysadmin1138.net/images/jumbo-setting.png

这就是你在我的一台服务器上改变它的地方。

它可以帮助吗? 当然可以。 较less的数据包碎片意味着TCP堆栈上重新组装业务stream的工作量较less。 这可能不是数量级,但可能有帮助。

服务器本地连接使用,我相信,pipe道,而不是TCP连接,并可能不受此更改影响。

你可以尝试,但我怀疑这会有多大帮助。 作为协议的TDS从来没有被devise用于高吞吐量。 如果你想在两个SQL服务器实例之间移动数据,你可能会考虑使用Service Broker ,它的networking堆栈更倾向于比TDS更高的吞吐量。 这就是为什么镜像selectSSBnetworking堆栈与备用镜像服务器进行通信的原因。 除了SSB的数据移动语义要比连接的服务器好得多,通常比自定义的客户端应用程序更好。

我不能评论tcp,框架等,但我只设置SQL Severnetworking数据包大小曾经,一些邪恶的应用程序,仍然需要SQL 6.5客户端工具。

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