Oracle Net Services 位於 **OSI 第 5 層 (Session Layer)**,封裝在 TCP/IP 之上。DBA 可調整 **封包大小 (SDU/TDU)**、**傳送頻率 (TCP.NODELAY)**、**本地連線繞越 (IPC)**,但底層 TCP 視窗、MTU、路由需網管配合。
| 參數 | 檔案 | 作用端 | 預設值 | 建議值 | 影響 |
|---|---|---|---|---|---|
SDU | tnsnames.ora / listener.ora | Client/Server | 2 KB | 8~32 KB (≤ MTU) | 單次網路封包承載量,減少 Round-trip |
TDU | tnsnames.ora / listener.ora | Client/Server | 2 KB | = SDU 或 2×SDU | 傳輸緩衝單位,配合 SDU 優化 |
TCP.NODELAY | protocol.ora | Client/Server | NO (Nagle 啟用) | YES | 關閉 Nagle 演算法,小封包立即發送,降低延遲 |
AUTOMATIC_IPC | sqlnet.ora | Server | OFF | ON (本地連線) | 本地連線自動轉 IPC,繞過網路堆疊 |
BREAK_POLL_SKIP | sqlnet.ora | Client | 0 | 4~10 | 減少斷點輪詢頻率,降低 CPU |
# $ORACLE_HOME/network/admin/protocol.ora
TCP.NODELAY = YES
**效果**:每個請求/回應立即發送,不等待緩衝區滿。**代價**:封包數增加、頻寬佔用略增、高併發下可能加劇網路擁塞。**適用**:低延遲敏感 OLTP、跨資料庫連結 (DB Link)、Data Guard 同步傳輸。**不適用**:大量批次傳輸 (Data Pump, RMAN) — 可在 Session 級 ALTER SESSION SET EVENTS '10198 TRACE NAME CONTEXT FOREVER, LEVEL 1' 臨時關閉。
# tnsnames.ora (Client)
PROD =
(DESCRIPTION =
(SDU=32767) (TDU=32767)
(ADDRESS = (PROTOCOL=TCP)(HOST=prod-db)(PORT=1521))
(CONNECT_DATA = (SERVICE_NAME=PROD))
)
# listener.ora (Server)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL=TCP)(HOST=prod-db)(PORT=1521))
(SDU=32767) (TDU=32767)
)
)
**MTU 限制**:乙太網標準 MTU 1500 Bytes,扣除 IP/TCP 標頭 ~40 Bytes,**實際 SDU 上限 ≈ 1460**。若啟用 Jumbo Frame (MTU 9000),SDU 可設 8192~32767。**兩端必須一致**,否則以較小者為準。
# sqlnet.ora (Server)
AUTOMATIC_IPC = ON
# 本地連線 (Bequeath) 自動使用 IPC/Bequeath 協議,完全繞過 Listener/TCP 堆疊
# sqlnet.ora (Client)
BREAK_POLL_SKIP = 4
# 減少 OCI 客戶端檢查 Ctrl+C 斷點的頻率,降低 CPU 佔用
-- 1. 確認實際 SDU 生效
SELECT sid, serial#, paddr, sdu, tdu FROM v$session_connect_info WHERE sid = SYS_CONTEXT('USERENV','SID');
-- 2. 封包追蹤 (WireShark / tcpdump)
tcpdump -i eth0 -nn -s 0 port 1521 -w oracle.pcap
-- 3. 網路延遲測量
SELECT * FROM v$session_wait WHERE event LIKE 'SQL*Net%';
-- 常見事件: SQL*Net message to client / from client / more data to client
V$SESSION_WAIT 確認等待事件再動網路參數。Oracle 網路調優核心三板斧:**SDU/TDU 對齊 MTU/Jumbo Frame**、**TCP.NODELAY 低延遲場景開啟、批次場景關閉**、**AUTOMATIC_IPC 本地連線繞越**。參數調整必須 **兩端一致**、**有基線對比**、**納入變更管理**。記住:網路只是管道,**資料流動效率取決於 SQL 與索引**。