伺服器組態:網路封包大小
適用於: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
伺服器層級權限。 sysadmin 和 serveradmin 固定伺服器角色隱含地持有 ALTER SETTINGS
權限。
使用 SQL Server Management Studio
在物件總管中,請以滑鼠右鍵按一下伺服器,然後選取 [屬性]。
選取 [進階] 節點。
在 [網路] 下,為 [網路封包大小] 方塊選取一個值。
使用 Transact-SQL
連線至資料庫引擎。
在標準列上,選取 [新增查詢]。
複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。 此範例示範如何使用 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 。