- 首页 >
- 问答 >
-
云计算 >
- Ubuntu Oracle如何处理并发连接
Ubuntu Oracle如何处理并发连接
小樊
45
2025-12-26 13:39:08
Ubuntu上Oracle并发连接的处理与优化
并发处理机制
- MVCC(多版本并发控制):同一行数据可同时存在多个版本,读操作不加排他锁,避免读写互相阻塞,提升并发读能力。
- 锁与闩锁:以行级锁为主减少冲突,辅以必要的表级/DML锁与闩锁保护结构一致性与并发正确性。
- 事务隔离级别:默认读已提交(READ COMMITTED),并提供**可重复读(REPEATABLE READ)与序列化(SERIALIZABLE)**等选项,按业务一致性需求权衡并发度与一致性。
- 死锁处理:Oracle自动检测死锁并回滚代价较小的事务,应用应合理设计访问顺序与事务粒度以降低发生概率。
容量与连接架构
- 关键容量关系与常用估算:
- 建议关系:sessions ≈ 1.1 × processes,transactions ≈ 1.1 × sessions(为会话与事务峰值预留余量)。
- 调度器数量估算:dispatchers ≈ ceil(最大并发会话数 / 每个调度器可承载连接数);经验上每个调度器可支撑约**200+**连接,实际以监控为准。
- 专用服务器与共享服务器(MTS)取舍:
- 专用服务器(Dedicated):每个连接对应一个服务器进程,适合长事务/复杂SQL/高CPU场景。
- 共享服务器(MTS):通过dispatchers + shared_servers共享进程,适合短连接/高并发/连接数远大于CPU核数的场景。
- 常用参数与含义:
- processes / sessions / transactions:实例级容量上限。
- shared_servers / max_shared_servers:共享服务器最小/最大数量。
- dispatchers / max_dispatchers:协议与数量(可配pool=on做连接汇集)。
- shared_server_sessions:共享服务器可承载的会话上限。
- 示例(MTS,按需调整数值):
- 估算:若预期并发会话为1000,按每调度器200连接,则 dispatchers ≈ 5。
- 配置:
- alter system set processes=1200 scope=spfile;
- alter system set sessions=1320 scope=spfile;
- alter system set transactions=1450 scope=spfile;
- alter system set shared_servers=5;
- alter system set max_shared_servers=20;
- alter system set dispatchers=‘(protocol=tcp)(dispatchers=5)(pool=on)(tick=1)(connections=500)(sessions=1000)’;
- alter system set max_dispatchers=10;
- alter system set shared_server_sessions=1100;
- 客户端(tnsnames.ora)使用:
- 如需更大并发,可结合连接池与长连接策略,减少频繁建连/断连开销。
监听与网络层优化
- 提升单次往返效率:增大客户端/服务端SDU(Session Data Unit)与ARRAYSIZE,减少网络往返次数;静态注册可在 listener.ora/tnsnames.ora 设置 SDU,动态注册在 sqlnet.ora 设置 DEFAULT_SDU_SIZE。
- 提高并发排队能力:在 listener.ora 的监听地址上设置QUEUESIZE,缓解突发并发导致的TNS-12535/ORA-12535超时;需与系统内核/网络参数协同。
- 多监听与本地协议:同机可用IPC替代 TCP 绕过监听;必要时为实例开设多个端口(如1521/1522)做分流。
- 连接策略:优先长连接/连接池,避免大量短连接带来的CPU与内存压力。
- 系统内核与Oracle Net:适度增大TCP 发送/接收缓冲区(如 SEND/RECV_BUF_SIZE),并关注监听日志大小对性能的影响。
资源管理与监控
- Resource Manager:按服务/模块/用户分配CPU、并行度与会话等资源,限制“吵闹邻居”,保障关键业务并发质量。
- 统计信息收集:启用并发统计信息收集,在维护窗口并行收集多对象统计,缩短停机时间并提升执行计划质量。
- 连接池参数建议(以常见连接池为例):
- initialSize:5–10;maxActive:按峰值×安全系数配置;maxIdle≈maxActive;minIdle:5–10;
- maxWait:60000 ms;removeAbandoned:true;removeAbandonedTimeout:180 s;
- 结合业务设置 minEvictableIdleTimeMillis,避免空闲连接被过早回收或过久占用。
- 常用监控视图:
- v$parameter(processes/sessions/shared_servers 等容量参数);
- v$license(sessions_current/sessions_highwater 峰值);
- v$session / v$process(在线会话与进程);
- v$dispatcher(调度器负载、空闲/繁忙、消息数)。
快速排查清单
- 出现TNS-12535/ORA-12535:检查并适当提升监听QUEUESIZE,同时评估网络与TCP缓冲区;必要时增设监听端口分流。
- 连接风暴/CPU飙升:优先使用连接池与长连接,减少短连接;复核应用SQL与解析(绑定变量、执行计划)。
- 共享服务器瓶颈:监控 v$dispatcher 的 busy/idle,按“dispatchers ≈ 并发会话/每调度器承载量”逐步扩容,并调整 shared_servers 与 max_shared_servers。
- 容量不足:当 sessions_highwater 接近 sessions 上限,按“sessions ≈ 1.1 × processes”规则同步上调 processes/sessions/transactions 并重启实例。