分享方式:


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

適用於:SQL Server

本文說明如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中設定 network packet size 伺服器組態選項。 選項 network packet size 會設定整個網路所使用的封包大小(以位元組為單位)。 封包是在用戶端與伺服器之間傳送要求與結果的固定大小資料區塊。 預設的封包大小為 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 伺服器層級權限。 sysadminserveradmin 固定伺服器角色隱含地持有 ALTER SETTINGS 權限。

使用 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 中監視「稽核登入」事件或 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