暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle数据库进程与会话参数优化设置指南

原创 暮雨 2025-10-15
272

上一期发布了关于oracle数据库安装后的参数优化文档,此文档只给出了参考指引,没有给出对应的设置规则,接下来几期文档将详细的写写配置规则相关的给大家参考,这里列举依然是常规设置,实际项目中还是需要根据实际情况灵活调整。

前两期也分享了内存参数相关的优化,本期继续分享进程与会话参数相关部分,主要是PROCESSESSESSIONS 参数。

注意:所有内存参数的修改都应在测试环境充分验证后再应用于生产环境,避免因内存分配不当导致数据库性能问题或实例无法启动

重要提示:不同Oracle版本可能存在差异,生产环境调整前请务必查阅对应版本的官方文档并进行测试。所有修改操作前请做好参数文件备份

-- 创建PFILE备份
CREATE PFILE='/backup/initORCL_20231201.ora' FROM SPFILE;
-- 直接复制SPFILE(需要数据库关闭)
-- 在操作系统层面复制
-- cp $ORACLE_HOME/dbs/spfileORCL.ora /backup/

Oracle数据库进程与会话参数优化设置指南

1. 核心概念解析

1.1 PROCESSES参数

  • 定义PROCESSES 参数指定了同时连接到Oracle数据库实例的操作系统进程数量上限
  • 范围:包括后台进程(如数据库写入进程、日志写入进程等)和服务器进程(为用户会话服务的进程)。
  • 重要性:当需要启动新的进程而当前进程数已达到此参数设置的上限时,Oracle会返回 "ORA-00020: maximum number of processes (number) exceeded" 错误。

1.2 SESSIONS参数

  • 定义SESSIONS 参数定义了一个Oracle数据库实例中允许同时存在的最大会话数量
  • 范围:每个登录到数据库的用户都会建立一个会话,因此此参数实际上决定了数据库的最大并发用户数
  • 重要性:当活动会话数达到此参数限制时,新的会话连接尝试将导致 "ORA-00018: maximum number of sessions exceeded" 错误。

1.3 进程与会话的关系

  • 通常,SESSIONS 的值会大于 PROCESSES 的值,因为一个后台进程可能同时服务多个会话
  • SESSIONS 参数是一个派生值,通常基于 PROCESSES 参数的值通过特定公式计算得出。
  • 当数据库连接资源耗尽时,客户端可能会收到 "ORA-12519, TNS:no appropriate service handler found" 错误。

2. 版本差异与计算公式

不同Oracle版本中,SESSIONS 参数的计算公式有所变化,具体如下:

Oracle 版本 SESSIONS 计算公式 说明
Oracle 10g, 11gR1 SESSIONS = (1.1 * PROCESSES) + 5 早期版本的默认计算公式
Oracle 11gR2, 18c, 19c SESSIONS = (1.5 * PROCESSES) + 22 11gR2及以后版本的默认公式

注意事项

  • 如果当前 SESSIONS 值大于计算值,则可能保持当前值;如果小于计算值,则 SESSIONS 会取计算值。即 SESSIONS 通常取 MAX(当前值, 计算值)
  • 虽然可以手动设置 SESSIONS 参数,但Oracle官方建议不要将其设置为低于默认计算值的值

3. 参数设置操作指南

3.1 查询当前参数值

在进行任何修改前,首先需要查询当前的参数设置。

-- 查看当前PROCESSES参数值
SELECT value FROM v$parameter WHERE name = 'processes';
-- 或
SHOW PARAMETER processes;

-- 查看当前SESSIONS参数值
SELECT value FROM v$parameter WHERE name = 'sessions';
-- 或
SHOW PARAMETER sessions;

-- 查看当前活跃进程数
SELECT count(*) FROM v$process;

-- 查看当前活跃会话数
SELECT count(*) FROM v$session;

注意:查询参数时,V$PARAMETER 反映的是当前会话中生效的参数值,而 V$SYSTEM_PARAMETER 反映的才是实例级别的初始化参数。要获取系统启动参数,应使用 V$SYSTEM_PARAMETER

3.2 计算与规划示例

场景:规划一个预计高峰时段并发用户为500人的Oracle 19c数据库系统参数。

-- 步骤1:计算PROCESSES参数
-- 高峰并发用户数 = 500
-- 后台进程数 ≈ 40(典型Oracle数据库后台进程)
-- 安全余量 ≈ 20%
-- 推荐PROCESSES = (500 + 40) * 1.2 = 648 ≈ 650

-- 步骤2:计算SESSIONS参数(19c使用新公式)
-- SESSIONS = (1.5 * PROCESSES) + 22
-- SESSIONS = (1.5 * 650) + 22 = 997 ≈ 1000

-- 最终设置:
-- PROCESSES = 650
-- SESSIONS = 1000

3.3 修改参数设置

重要:修改 PROCESSESSESSIONS 参数必须重启数据库才能生效,且只能使用 SPFILE 方式进行修改。

-- 备份参数文件(重要!)
CREATE PFILE='/home/oracle/pfile_backup.ora' FROM SPFILE;

-- 修改PROCESSES参数
ALTER SYSTEM SET processes=650 SCOPE=SPFILE;

-- 修改SESSIONS参数
ALTER SYSTEM SET sessions=1000 SCOPE=SPFILE;

-- 重启数据库使更改生效
SHUTDOWN IMMEDIATE;
STARTUP;

关键注意事项

  • 务必在修改前备份参数文件,以防配置错误导致数据库无法启动。
  • 在生产环境中,如果需要调整RAC环境的参数,可以逐个实例修改并分别重启,以减少服务中断时间。
  • PROCESSES 参数不建议设置过大,因为数据库启动时会为每个进程预先分配内存结构,设置过大会导致启动失败或资源浪费。

3.4 ASM环境的特殊设置

对于ASM(Automatic Storage Management)实例,PROCESSES 参数的设置有所不同:

-- 当数据库实例数量 n < 10 时:
PROCESSES = 50 * n + 50

-- 当数据库实例数量 n >= 10 时:
PROCESSES = 10 * n + 450

Oracle官方通常不建议修改ASM实例的 PROCESSES 参数,除非存在多个数据库实例。

4. 性能优化与问题诊断

4.1 参数优化建议

  1. 监控与规划

    • 定期监控 V$PROCESSV$SESSION 视图,了解系统的实际使用情况。
    • 根据监控数据和高并发时段的资源使用情况调整参数设置。
  2. 容量规划

    • 设置 PROCESSES 参数时,应考虑高峰时段的并发需求,并增加约20-50%的余量。
    • 对于OLTP系统,需要预留更多的进程和会话资源。
  3. 连接池优化

    • 对于Web应用,使用数据库连接池可以有效减少实际需要的数据库会话数。
    • 调整应用服务器的连接池配置,避免创建过多并发连接。

4.2 常见问题与解决方案

问题1:遇到 "ORA-12519, TNS:no appropriate service handler found" 错误。

解决方案

-- 1. 检查当前会话和进程使用情况
SELECT * FROM v$resource_limit WHERE resource_name IN ('processes', 'sessions');

-- 2. 如果接近上限,考虑增加PROCESSES和SESSIONS参数
-- 3. 或者检查应用连接池配置,确保连接被正确释放

问题2:数据库连接数达到上限,无法正常连接。

解决方案

-- 1. 强制清理部分空闲会话(如有权限)
SELECT 'ALTER SYSTEM KILL SESSION ''' || sid || ',' || serial# || ''';' 
FROM v$session 
WHERE status = 'INACTIVE' AND last_call_et > 3600; -- 清理空闲超过1小时的会话

-- 2. 重启数据库(需要业务窗口)
-- 3. 临时增加参数值(需重启)

问题3:如何预防连接数耗尽问题。

解决方案

  • 设置监控告警,当会话和进程使用率超过80%时发出警告。
  • 定期分析会话趋势,提前规划容量扩展。
  • 优化应用程序,确保数据库连接及时关闭,避免连接泄漏。

5. 其他参数

  • SESSIONS_PER_USER:限制单个用户可以同时建立的最大会话数,防止资源被单一用户独占。

  • IDLE_TIME:设置在终止会话之前,允许会话保持空闲状态的最大分钟数。这有助于清理不活动的连接,释放系统资源。

    -- 示例:设置默认配置文件的空闲时间限制为30分钟
    ALTER PROFILE default LIMIT idle_time 30;
    
  • USE_LARGE_PAGES:对于SGA较大(例如超过10GB)或高并发会话的环境,Oracle官方强烈建议启用HugePages(大页)以减少内存管理开销,提升性能。设置 USE_LARGE_PAGES=ONLY 可以强制使用大页。

    -- 启用大页,并禁用与HugePages不兼容的AMM
    ALTER SYSTEM SET memory_target=0 SCOPE=spfile;
    ALTER SYSTEM SET use_large_pages=ONLY SCOPE=spfile;
    

    在高并发会话的环境中,内存管理至关重要。

  • OPEN_CURSORS:指定每个会话可以同时打开的最大游标数。如果应用存在游标泄漏或复杂查询,可能需要适当调高此值。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论