設定網路封包大小 (伺服器群組態選項)

適用於:SQL Server

本文描述如何使用 SQL Server Management Studio 或 Transact-SQL,以在 SQL Server 中設定「網路封包大小」伺服器設定選項。 [網路封包大小] 選項會設定用於整個網路的封包大小 (以位元組為單位)。 封包是在用戶端與伺服器之間傳送要求與結果的固定大小資料區塊。 預設的封包大小為 4096 個位元組。

注意

除非確信有助於提升效能,否則請不要變更封包大小。 對於大部分應用程式而言,預設封包大小是最適當的大小。

設定會立即生效,不需要重新啟動伺服器。

限制事項

  • 加密連接的最大 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 伺服器層級權限。 系統管理員 (sysadmin)serveradmin 固定伺服器角色會隱含 ALTER SETTINGS 權限。

使用 SQL Server Management Studio

  1. 在物件總管中,請以滑鼠右鍵按一下伺服器,然後選取 [屬性]。

  2. 選取 [進階] 節點。

  3. [網路] 下,為 [網路封包大小] 方塊選取一個值。

使用 Transact-SQL

  1. 連線至資料庫引擎。

  2. 在標準列上,選取 [新增查詢]。

  3. 複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。 此範例示範如何使用 sp_configurenetwork packet size 選項的值設定為 6500 個位元組。

USE AdventureWorks2022;
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 中監視「稽核登入」事件或 ExistingConnection 事件,以判斷用戶端連線的網路封包大小。

注意

如果應用程式的連接字串包含網路封包大小的值,則會將該值用於通訊。 如果連接字串未包含值,則驅動程式會使用網路封包大小的預設值。 例如,如上表所述,SqlClient 應用程式會使用預設封包大小 8000,而 ODBC 應用程式則會使用伺服器上所設定的封包大小。

重要

SQL Server Native Client (通常縮寫為 SNAC) 已從 SQL Server 2022 (16.x) 和 SQL Server Management Studio 19 (SSMS) 中移除。 不建議使用 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

另請參閱