服务器配置:网络数据包大小

适用范围:SQL Server

本文介绍如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中配置 network packet size 服务器配置选项。 该 network packet size 选项设置在整个网络中使用的数据包大小(以字节为单位)。 数据包是具有固定大小的数据块区,用于在客户端与服务器之间传输请求和结果。 默认数据包大小为 4,096 个字节。

注意

除非确定数据包大小会提高性能,否则不要更改数据包大小。 对于大多数应用程序而言,默认数据包大小为最佳数值。

该设置将立即生效,无需重新启动服务器。

限制

对于加密连接,network packet size 的最大值为 16,383 字节。

备注

如果 MARS 已启用,SMUX 提供程序会在进行 TLS 加密之前,向数据包添加 16 字节的头,从而将最大网络数据包大小减少到 16368 字节。

建议

此选项是一个高级选项,仅应由有经验的数据库管理员或认证的 SQL Server 专业人员更改。

如果应用程序进行大容量复制操作,或者发送或接收大量文本或图像数据时,数据包大小大于默认值可以提高效率,因为这样可以减少网络读写操作。 如果应用程序发送和接收的信息量较少,则可以将数据包大小设置为 512 字节,这对大多数数据传输足够了。

在使用不同网络协议的系统上,将网络数据包大小设置为最常用协议使用的大小。 如果网络协议支持更大的数据包,则使用 network packet size 选项可以提高网络性能。 客户端应用程序可以覆盖此值。

您还可以调用 OLE DB、开放式数据库连接 (ODBC) 和 DB-Library 函数来请求更改数据包大小。 如果服务器不支持请求的数据包大小,则数据库引擎向客户端发送警告消息。 在某些情况下,更改数据包大小可能会导致通信链接失败,例如以下错误:

Native Error: 233, no process is on the other end of the pipe.

权限

默认情况下,所有用户都具备不带参数或仅带第一个参数的 sp_configure 的执行权限。 若要使用两个参数执行 sp_configure 来更改配置选项或运行 RECONFIGURE 语句,用户必须拥有 ALTER SETTINGS 服务器级别权限。 ALTER SETTINGS 权限由 sysadmin 和 serveradmin 固定服务器角色隐式拥有。

使用 SQL Server Management Studio

  1. 在对象资源管理器中,右键单击服务器并选择 “属性”

  2. 选择“高级”节点。

  3. “网络” 下,选择 “网络数据包大小” 框的值。

使用 Transact-SQL

  1. 连接到 数据库引擎。

  2. 在标准栏上,选择“新建查询”。

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。 此示例说明了如何使用 sp_configurenetwork packet size 选项的值设置为 6500 字节。

    USE master;
    GO
    
    EXECUTE sp_configure 'show advanced options', 1;
    GO
    
    RECONFIGURE;
    GO
    
    EXECUTE sp_configure 'network packet size', 6500;
    GO
    
    RECONFIGURE;
    GO
    
    EXECUTE sp_configure 'show advanced options', 0;
    GO
    
    RECONFIGURE;
    GO
    

有关详细信息,请参阅服务器配置选项

在客户端上配置网络数据包大小

下表提供了一些数据连接技术的示例,包括可以使用这些技术连接到 SQL Server,以及如何在客户端应用程序中使用这些技术时控制网络数据包大小。 有关可用于连接到 SQL Server 的各种数据连接技术的完整列表,请参阅 用于客户端编程Microsoft SQL Server 的主页:

客户端库 选项 默认
SQLSetConnectAttr 函数 SQL_ATTR_PACKET_SIZE 使用服务器端
设置连接属性 setPacketSize(int packetSize) 8000
ADO.NET - Microsoft.Data.SqlClient PacketSize 8000
ADO.NET - System.Data.SqlClient PacketSize 8000
初始化和授权属性 SSPROP_INIT_PACKETSIZE 0(使用服务器端)

可以监视 SQL Profiler 中的 Audit Login 事件或 ExistingConnection 事件,以确定客户端连接的网络数据包大小。

如果应用程序的连接字符串包含网络数据包大小的值,则该值用于通信。 如果连接字符串不包含值,则驱动程序使用网络数据包大小的默认值。 例如,如上表中所述,SqlClient 应用程序使用默认数据包大小 8000,而 ODBC 应用程序使用服务器上配置的数据包大小。

重要

已从 SQL Server 2022 (16.x) 和 SQL Server Management Studio 19 (SSMS) 中移除 SQL Server Native Client(通常缩写为 SNAC)。 不建议使用 SQL Server Native Client OLE DB 访问接口(SQLNCLI 或 SQLNCLI11)和旧版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 进行新开发。 切换到新的 Microsoft OLE DB Driver for SQL Server 或最新的 Microsoft ODBC Driver for SQL Server