Oracle 网络性能优化
Oracle 网络性能优化
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Oracle 网络性能影响客户端连接[1]:
关键组件:
- Listener
- SQL*Net
- SDU/ TDU
- 连接池
2. Listener 优化
2.1 查看
lsnrctl status
2.2 多 Listener
# listener.ora
LISTENER1 = (ADDRESS=(PROTOCOL=tcp)(HOST=node1)(PORT=1521))
LISTENER2 = (ADDRESS=(PROTOCOL=tcp)(HOST=node1)(PORT=1522))
2.3 队列大小
# listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = tcp)(HOST = node1)(PORT = 1521)
(QUEUESIZE = 100))
)
)
3. SDU / TDU
3.1 SDU(Session Data Unit)
# sqlnet.ora
DEFAULT_SDU_SIZE = 32767
# listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SDU = 32767)
(SID_NAME = orcl)
)
)
# tnsnames.ora
ORCL =
(DESCRIPTION =
(SDU = 32767)
(ADDRESS = ...)
(CONNECT_DATA = ...)
)
3.2 优势
- 减少网络往返
- 大数据传输快
- 默认 8KB,推荐 32KB
4. 连接池
4.1 DRCP
-- 启用
ALTER SYSTEM SET shared_servers = 10;
ALTER SYSTEM SET max_shared_servers = 50;
4.2 客户端
# tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = ...)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
(SERVER = SHARED)
)
)
4.3 优势
- 减少服务器进程
- 支持大量连接
- 资源节省
详细见:Oracle 网络架构与监听器配置。
5. 网络等待事件
5.1 关键事件
SQL*Net message from client
SQL*Net message to client
SQL*Net more data from client
SQL*Net more data to client
SQL*Net break/reset to client
5.2 查看
SELECT
event,
total_waits,
time_waited,
average_wait
FROM v$system_event
WHERE event LIKE 'SQL*Net%'
ORDER BY time_waited DESC;
5.3 分析
SQL*Net message from client:等待客户端,IdleSQL*Net more data to client:大量数据传输
6. 优化策略
6.1 减少 SQL*Net 往返
-- 1. Array Fetch(PL/SQL)
FETCH c BULK COLLECT INTO v LIMIT 100;
-- 2. 批量操作
FORALL i IN 1..v.COUNT
INSERT INTO ...;
-- 3. 减少网络调用
-- 单次 SQL 多行
6.2 大 SDU
DEFAULT_SDU_SIZE = 32767
6.3 连接复用
-- 连接池
-- 应用层
6.4 本地连接
-- BEQ 协议(本地)
-- 比 TCP 快
7. 网络加密性能
7.1 Native Encryption
# sqlnet.ora
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
7.2 性能影响
- 加密开销
- CPU 使用
7.3 优化
- 高效算法(AES)
- 硬件加速
- 仅敏感数据加密
8. 连接建立优化
8.1 减少解析时间
# sqlnet.ora
SQLNET.INBOUND_CONNECT_TIMEOUT = 60
8.2 预连接
- 应用连接池
- 减少握手
8.3 缓存
# sqlnet.ora
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
9. 远程数据库
9.1 DB Link
CREATE DATABASE LINK remote_db
CONNECT TO user IDENTIFIED BY ******
USING 'remote_db';
9.2 优化
-- 1. 减少远程调用
-- 2. 批量传输
-- 3. 物化视图
10. 监控
10.1 网络流量
SELECT
event,
total_waits,
time_waited
FROM v$system_event
WHERE event LIKE 'SQL*Net%';
10.2 Listener 日志
tail -f $ORACLE_HOME/network/log/listener.log
10.3 OS 监控
# 网络流量
sar -n DEV 1
# 延迟
ping server
traceroute server
11. 常见坑与排错
11.1 客户端慢
1. 网络延迟
2. DNS 解析
3. 防火墙
4. Listener 队列
11.2 连接拒绝
ORA-12520: TNS:listener could not find available handler
-- 1. 增加 PROCESSES
-- 2. DRCP
-- 3. 连接池
11.3 大数据传输慢
1. 增大 SDU
2. 批量操作
3. 网络带宽
12. 最佳实践
- 大 SDU:32KB
- Array Fetch:减少往返
- 连接池:复用
- DRCP:大量连接
- BEQ 本地:快
- 加密平衡:性能/安全
- 监控 SQL*Net:性能
- DNS 缓存:解析
- 多 Listener:负载
- 网络硬件:基础
13. 参考资料
[1] Oracle Database Net Services Administrator’s Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/netag/