首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 網絡調優全攻略:sqlnet.ora/tnsnames.ora/protocol.ora 關鍵參數深度解析

     編輯:Oracle 資料庫基礎

一、網絡調優的本質與邊界

Oracle Net 屬於 OSI 第 5 層 (會話層),坐落於 TCP/IP 協議棧之上。DBA **無法直接調整底層 TCP/IP 參數** (需網管配合),但可控制 **Oracle Net 層面的封包頻率與大小**,間接影響吞吐量。

二、五大核心調優參數

參數所在文件作用層面適用端
AUTOMATIC_IPCsqlnet.ora本地連線繞過網絡層,直接用 IPCServer
BREAK_POLL_SKIPsqlnet.ora斷點輪詢間隔,減少網路往返Client
SDU / TDUtnsnames.ora, listener.ora會話數據單元 / 傳輸數據單元大小Client & Server
TCP.NODELAYprotocol.ora禁用 Nagle 演算法,立即發送小封包Client & Server
QUEUESIZElistener.ora監聽器連接請求佇列長度Server

三、參數深度解析與設定指南

1. TCP.NODELAY:禁用 Nagle 演算法

原理:預設 TCP 會緩衝小封包等待湊大封包 (Nagle),導致延遲。設定 TCP.NODELAY = YES 使每次請求立即發送。

# protocol.ora (Client & Server 端均需設定)
TCP.NODELAY = YES

適用場景:高頻小封包交互 (OLTP、大量分散式事務)。副作用:封包數激增,可能加重網路擁塞,須配合網管評估。

2. AUTOMATIC_IPC:本地連線捷徑

# sqlnet.ora (Server 端)
AUTOMATIC_IPC = ON

機制:檢測連線目標為本機資料庫且別名相同時,自動轉為 IPC (共享記憶體) 通訊,繞過 TCP/IP 棧。僅對資料庫服務器上的本地連線生效,遠程客戶端無效。

3. SDU / TDU:調整封包大小

# tnames.ora (Client) / listener.ora (Server)
DESCRIPTION =
  (ADDRESS = (PROTOCOL=TCP)(HOST=...)(PORT=1521))
  (CONNECT_DATA = (SERVICE_NAME=...))
  (SDU=8192)  # 會話數據單元
  (TDU=8192)  # 傳輸數據單元

核心原則:

  • SDU ≤ TDU,否則浪費頻寬
  • 理想值 = 網路 MTU (最大傳輸單元) - IP/TCP 頭部開銷
  • 乙太網 MTU=1500 → 建議 SDU=TDU=1460~1480
  • Token Ring MTU=4202 → 建議 SDU=TDU=4100
  • 廣域網/Modem:設較小值 (如 512) 減少重傳
  • 高速 LAN/專線:設較大值 (8K~32K) 減少系統調用
  • 最大值 32767 位元組

MTS/Shared Server 注意:需在 MTS_DISPATCHERS 參數中同步設定 (SDU=...)(TDU=...)。

4. BREAK_POLL_SKIP:減少斷點輪詢

# sqlnet.ora (Client)
BREAK_POLL_SKIP = 1000

客戶端每 N 次發送/接收操作檢查一次斷點信號 (Ctrl+C)。預設較小,增大可減少系統調用,適用於長時間查詢/批量操作的客戶端。

5. QUEUESIZE:監聽器佇列長度

# listener.ora
LISTENER =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL=TCP)(HOST=marvin)(PORT=1521)(QUEUESIZE=32))
  )

適用:高併發連線風暴 (如應用服務器啟動瞬間)。代價:預分配記憶體。限制:部分 Unix 限制最大 5,MTS 有自身佇列限制。高併發首選 MTS/Connection Pooling。

四、調優策略總表

場景SDU/TDUTCP.NODELAYAUTOMATIC_IPCQUEUESIZE
高頻 OLTP (LAN)8192 / 8192YESON (Server)32-64
大批量數據傳輸 (DW/ETL)32767 / 32767NO (預設)OFF預設
廣域網/高延遲鏈路1024 / 1024YESOFF預設
本地高併發 (App Server 同機)8192 / 8192YESON64+

五、驗證與監控

  1. 啟用 SQL*Net Trace:TRACE_LEVEL_CLIENT = 16 / TRACE_LEVEL_SERVER = 16 (sqlnet.ora)
  2. 抓包分析:Wireshark 過濾 tcp.port == 1521 觀察封包大小、頻率、重傳率
  3. 監控指標:V$SESSION_WAIT 等待事件 SQL*Net message from/to client/dblink
  4. AWR/Statspack:SQL*Net roundtrips 統計
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved