伺服器組態:網路封包大小

適用於:SQL Server

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

注意

除非您確定封包大小會改善效能,否則請勿變更封包大小。 對於大部分應用程式而言,預設封包大小是最適當的大小。

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

限制

加密連線的最大網路封包大小為 16,383 位元組。

注意

如果已啟用 MARS,SMUX 提供者會在 TLS 加密之前將 16 位元組標頭新增至封包,將最大的網路封包大小縮減為 16368 個位元組。

建議

此選項是進階選項,只能由經驗豐富的資料庫專業人員變更。

如果應用程式進行大量複製作業,或是傳送或接收大量的文字或影像資料,則使用大於預設值的封包有助於改善效能,因為這樣可以減少網路讀取與寫入的作業。 如果應用程式傳送與接收的資訊量很少,可以將封包大小設定為 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. 選取 Advanced 節點。

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

使用 Transact-SQL

  1. 連線至資料庫引擎。

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

  3. 複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。 此範例示範如何使用 sp_configure 將 network 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 中監視「稽核登入」事件或 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 for SQL Server 或最新的 Microsoft ODBC Driver for SQL Server。