配置“网络数据包大小”服务器配置选项

适用于: SQL Server(所有受支持的版本)

本文介绍如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中配置“网络数据包大小”服务器配置选项。 “网络数据包大小”选项设置整个网络中使用的数据包大小(以字节为单位)。 数据包是具有固定大小的数据块区,用于在客户端与服务器之间传输请求和结果。 默认数据包大小为 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 权限由 sysadminserveradmin 固定服务器角色隐式持有。

使用 SQL Server Management Studio

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

  2. 选择“高级”节点。

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

使用 Transact-SQL

  1. 连接到 数据库引擎。

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

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

USE AdventureWorks2019;
GO
EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'network packet size', 6500;
GO
RECONFIGURE;
GO

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

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

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

客户端库 选项 默认
ODBC SQL_ATTR_PACKET_SIZE 使用服务器端
JDBC setPacketSize(int packetSize) 8000
ADO.NET - Microsoft.Data.SqlClient PacketSize 8000
ADO.NET - System.Data.SqlClient PacketSize 8000
OLEDB 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 (MSOLEDBSQL) for SQL Server 或最新版的 Microsoft ODBC Driver for SQL Server

请参阅