上一篇【第15篇】Oracle后台进程详解——DBWR、LGWR、CKPT、SMON、PMON工作机制下一篇【第17篇】Oracle逻辑与物理存储结构——表空间、段、区、数据块全解析摘要本文讲解Oracle数据库的两种连接模式专用服务器模式和共享服务器模式的工作原理、适用场景和配置方法以及Oracle 11g的自动内存管理AMM和自动共享内存管理ASMM的配置与调优实践。一、专用服务器模式Dedicated Server1.1 工作原理专用服务器Dedicated Server是Oracle的默认连接模式。每个用户连接都有一个专属的服务器进程两者之间是一一对应的关系。用户进程 → Oracle监听器 → 专用服务器进程每个用户一个 建立连接后监听器不再参与通信专用服务器的特点每个连接独占一个服务器进程进程数 连接数UGA用户全局区存储在PGA中每个进程私有适合连接数相对较少但每个连接持续时间较长的场景-- 查看当前连接模式SELECTserverFROMv$sessionWHEREusernameISNOTNULL;-- DEDICATED专用服务器-- SHARED共享服务器-- 查看专用服务器进程数SELECTCOUNT(*)FROMv$sessionWHEREusernameISNOTNULLANDserverDEDICATED;-- 查看系统最大进程数限制SHOWPARAMETER processes-- 如果连接数接近processes限制考虑-- 1. 增大processes参数需重启-- 2. 使用连接池如Oracle Connection Pool-- 3. 切换到共享服务器模式ALTERSYSTEMSETprocesses500SCOPESPFILE;二、共享服务器模式Shared Server / MTS2.1 工作原理共享服务器Shared Server早期称为MTS—Multi-Threaded Server使用调度进程Dispatcher分发用户请求多个用户连接可以共享同一组服务器进程。用户进程 → 调度进程Dispatcher→ 请求队列 → 共享服务器进程 ↓ 处理完成→ 响应队列 → 用户进程-- 配置共享服务器需要重启才完全生效ALTERSYSTEMSETshared_servers5;-- 最少5个共享服务器进程ALTERSYSTEMSETmax_shared_servers20;-- 最多20个ALTERSYSTEMSETdispatchers(PROTOCOLTCP)(SERVICEorcl)(DISPATCHERS3);-- 3个TCP调度进程服务名为orcl-- 验证共享服务器配置SHOWPARAMETER shared_serversSHOWPARAMETER dispatchers-- 查看调度进程状态SELECTname,network,status,runtime_pctFROMv$dispatcher;-- 查看共享服务器进程SELECTname,requests,responses,statusFROMv$shared_server;-- 查看请求队列等待情况SELECTnetwork,queue,waited,totalqFROMv$queue;2.2 共享服务器 vs 专用服务器特性专用服务器共享服务器进程数 连接数远少于连接数适用场景长连接、批处理大量短连接如Web应用UGA存储PGA私有SGA的Large Pool内存效率低每连接一个进程高共享服务进程响应延迟低略高需要队列调度连接池支持好Oracle Connection Pool需要调度进程支持-- 共享服务器模式中UGA存储在SGA的Large Pool中-- 因此需要配置足够大的Large PoolALTERSYSTEMSETlarge_pool_size128M;-- 禁用共享服务器恢复到专用服务器模式ALTERSYSTEMSETshared_servers0;三、自动内存管理AMM详细配置3.1 AMM的工作原理Oracle 11g的AMMAutomatic Memory Management可以自动管理SGA和PGA的总量分配无需手动设置各个组件的大小。-- 前提条件需要操作系统支持Linux需要/dev/shm-- 检查/dev/shm大小必须大于MEMORY_TARGET-- df -h /dev/shm-- 启用AMM的步骤-- 1. 确认当前SGA和PGA的大小SHOWPARAMETER sga_targetSHOWPARAMETER pga_aggregate_target-- 2. 设置MEMORY_TARGETSGA PGA的总量-- 建议MEMORY_TARGET ≈ sga_target pga_aggregate_targetALTERSYSTEMSETmemory_target2G SCOPESPFILE;-- 3. 设置MEMORY_MAX_TARGET上限建议比memory_target大20%ALTERSYSTEMSETmemory_max_target2500M SCOPESPFILE;-- 4. 禁用之前的手动设置让AMM完全接管ALTERSYSTEMSETsga_target0SCOPESPFILE;ALTERSYSTEMSETpga_aggregate_target0SCOPESPFILE;-- 5. 重启数据库SHUTDOWNIMMEDIATE;STARTUP;-- 验证AMM已启用SHOWPARAMETER memory_targetSELECTcomponent,current_size/1024/1024ASmbFROMv$memory_dynamic_componentsWHEREcurrent_size0ORDERBYcurrent_sizeDESC;3.2 AMM下的组件最小值设置即使使用AMM也可以为各组件设置最小保证值-- 设置组件最小值AMM不会将组件缩小到此值以下ALTERSYSTEMSETdb_cache_size512M;-- Buffer Cache最小512MALTERSYSTEMSETshared_pool_size128M;-- Shared Pool最小128MALTERSYSTEMSETlarge_pool_size32M;-- Large Pool最小32M-- 查看AMM自动分配的结果和最小值SELECTcomponent,ROUND(current_size/1024/1024,2)AScurrent_mb,ROUND(min_size/1024/1024,2)ASmin_mb,ROUND(max_size/1024/1024,2)ASmax_mbFROMv$memory_dynamic_componentsWHEREcurrent_size0ORDERBYcurrent_sizeDESC;四、自动共享内存管理ASMM如果操作系统不支持AMM如某些Linux版本或Solaris不支持POSIX共享内存可以使用ASMM-- ASMM只管理SGAPGA手动设置-- 禁用AMM启用ASMMALTERSYSTEMSETmemory_target0SCOPESPFILE;-- 启用ASMMALTERSYSTEMSETsga_target1500M SCOPEBOTH;-- SGA总量ASMM自动分配ALTERSYSTEMSETpga_aggregate_target512M SCOPEBOTH;-- PGA手动设置-- 查看ASMM对各SGA组件的分配SELECTcomponent,current_size/1024/1024ASmbFROMv$sga_dynamic_componentsWHEREcurrent_size0;-- 内存顾问报告帮助确定最优SGA大小SELECTsga_size,sga_size_factor,estd_db_time,estd_db_time_factorFROMv$sga_target_adviceORDERBYsga_size;五、连接池无论使用哪种连接模式Oracle Connection Pool或中间件连接池如Apache DBCP、HikariCP都是现代应用架构的重要组件-- 查看连接池相关统计SELECTusername,COUNT(*)ASsession_count,SUM(DECODE(status,ACTIVE,1,0))ASactive_count,SUM(DECODE(status,INACTIVE,1,0))ASinactive_countFROMv$sessionWHEREusernameISNOTNULLGROUPBYusernameORDERBYsession_countDESC;-- 终止闲置时间过长的会话可以写成定时脚本SELECTsid,serial#, username, last_call_et / 60 AS idle_minutesFROMv$sessionWHEREusernameISNOTNULLANDstatusINACTIVEANDlast_call_et1800-- 空闲超过30分钟ORDERBYlast_call_etDESC;-- ALTER SYSTEM KILL SESSION sid,serial#;六、最佳实践与总结连接模式选择大多数现代应用尤其是Web应用使用连接池专用服务器模式只有连接数极多且连接时间极短时才考虑共享服务器模式AMM优先Oracle 11g及以上优先使用AMM大幅降低内存调优复杂度设置最小保证值使用AMM时为关键组件设置最小值防止Oracle在高负载下过度压缩某个组件监控内存使用趋势定期查看v$memory_dynamic_components了解Oracle的内存分配决策上一篇【第15篇】Oracle后台进程详解——DBWR、LGWR、CKPT、SMON、PMON工作机制下一篇【第17篇】Oracle逻辑与物理存储结构——表空间、段、区、数据块全解析参考资料《Oracle 11g数据库管理员指南》— 刘宪军著Oracle官方文档Database Administrator’s Guide - Configuring Shared ServersOracle官方文档Database Administrator’s Guide - Automatic Memory Management