4.oracle中process、session、transactions的关系

本文详细解释了Oracle数据库中processes、sessions和transactions参数的作用、计算公式以及它们之间的关系,特别关注并发用户限制和错误处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.本文简介

本文主要对oracle 中的 process、session、transactions 参数的学习记录

此文是基于11R2版本。

2.process

2.1 定义

PROCESSES specifies the maximum number of operating system user processes that can simultaneously connect to Oracle.Its value should allow for all background processes such as locks, job queue processes, and parallel execution processes.

PROCESSES  指定操作系统用户进程能够链接到ORACLE 的最大进程数。进程包括但不限于 后台进程与服务器进程、锁队列进程、job队列进程、并行的执行进程等。

2.2 和SESSIONS and TRANSACTION 的关系

The default values of the SESSIONS and TRANSACTIONS parameters are derived from this parameter. Therefore, if you change the value of PROCESSES, you should evaluate whether to adjust the values of those derived parameters.

PROCESSES 值会驱动(导致)SESSIONS and TRANSACTIONS 跟随变化。所以调整process 值时应计算是否调整 SESSIONS and TRANSACTIONS 的值

由于一个后台进程可能同时对应多个会话,所以,通常SESSIONS的值是大于PROCESSES的值。SESSIONS的值是根据PROCESSES的值计算得到的,所以,一般情况下只需要设置PROCESSES的值即可,但是还是实际情况实际分析。

三者值的计算公式:

<计算出session值>

在 dedicate server 模式

sessions= (1.5 * PROCESSES) + 22        range(1到65536)        

在shared  server 模式

In a shared server environment, the value of PROCESSES canbe quite small. Therefore, Oracle recommends that you adjust the value of SESSIONS to approximately 1.1 * total number of connections.

<计算出TRANSACTIONS值>

TRANSACTIONS=(1.1 * SESSIONS)

3.SESSIONS 

SESSIONS specifies the maximum number of sessions that can be created in the system. Because every login requires a session, this parameter effectively determines the maximum number of concurrent users in the system.You should always set this parameter explicitly to a value equivalent to yourestimate of the maximum number of concurrent users, plus the number of background processes, plus approximately 10% for recursive sessions.

SESSIONS指定可以在数据库中创建的最大会话数。因为每次登录都需要一个会话,所以该参数有效地确定了系统中并发用户的最大数量。应该将此参数显式设置为一个值,该值等于估计的最大并发用户数加上后台进程数,再加上递归会话的大约10%。

The default values of the ENQUEUE_RESOURCES and TRANSACTIONS parameters are derived from SESSIONS. Therefore, if you increase the value of SESSIONS, you should consider whether to adjust the values of ENQUEUE_RESOURCES and TRANSACTIONS as well. (Note that ENQUEUE_RESOURCES is obsolete as of Oracle Database 10g release2 (10.2).)

ENQUEUE_RESOURCES和TRANSACTIONS参数的默认值源自SESSIONS。因此,如果增加SESSIONS的值,则应考虑是否同时调整ENQUEUE_RESOURCES和TRANSACTIONS的值。(请注意,从Oracle Database 10g版本2(10.2)起,ENQUEUE_RESOURCES已过时。)

从v$session 视图可以看出 sessions 的连接范围跟process中涉及的进程一致。

4.transactions

TRANSACTIONS specifies how many rollback segments to online when UNDO_MANAGEMENT = MANUAL. The maximum number of concurrent transactions is now restricted by undo tablespace size (UNDO_MANAGEMENT = AUTO) or the number of online rollback segments(UNDO_MANAGEMENT = MANUAL).

TRANSACTIONS指定UNDO_MANAGEMENT=MANUAL时 要online 的回滚段数。并发事务的最大数量现在受到undo 表空间大小(undo_MANAGEMENT=AUTO)或在线回滚段数量(undo_ANAGEMENT=MANUAL)的限制

5.超限制时报错

1)当数据库连接的并发用户已经达到SESSIONS的值时,又有新会话连接进来,就会报错“ORA-00018,"maximum number of sessions exceeded"”的错误。

2)当Oracle需要启动新的PROCESS,而当前的进程数又已经达到PROCESSES参数时,就会报错:“ORA-00020: maximum number of processes (2048) exceeded”。

3)如果数据库上连接被占用完,当新的连接过来时,那么就会在客户端产生“ORA-12519, TNS:no appropriate service handler found”的报错信息。

<think>嗯,用户想了解Oracle AWR报告中的“inactive transaction branch”是什么意思。首先,我需要回忆一下Oracle数据库中的事务处理机制。事务分支通常与分布式事务有关,比如在多个数据库之间进行操作时,一个事务可能会分成多个分支。 那“inactive transaction branch”具体指什么呢?应该是指那些已经不再活跃,但还没有被完全清理的事务分支。可能是在分布式事务中,某个分支已经完成了操作,但其他分支还在进行,或者协调节点没有正确提交或回滚,导致这些分支处于不活跃状态,但仍然占用资源。 接下来,用户可能需要知道为什么会出现这种情况。可能的原因包括网络问题导致协调信息丢失,或者应用程序没有正确处理事务的提交/回滚,导致分支一直挂起。此外,数据库配置问题,比如分布式事务恢复设置不当,也可能导致这种情况。 然后,影响方面,这些不活跃的事务分支可能会占用系统资源,比如UNDO表空间,长时间不释放可能导致空间不足。同时,它们可能阻塞其他事务,影响数据库性能,甚至导致ORA-01591错误,提示事务被锁定。 解决方法方面,可能需要手动干预,比如使用COMMIT FORCE或ROLLBACK FORCE来强制结束事务。另外,检查应用程序的逻辑,确保分布式事务被正确处理,以及调整数据库参数,如调整分布式事务的超时时间,或者启用自动恢复机制。 用户可能还想知道如何在AWR报告中识别这个问题,可能需要查看相关部分的事务统计信息,比如事务分支的数量状态,是否有长时间未解决的分支。同时,相关的等待事件或锁信息也可能出现在报告中,需要结合其他部分进行分析。 最后,用户可能需要进一步的步骤来诊断解决这个问题,比如生成详细的跟踪文件,或者使用Oracle提供的工具如DBMS_TRANSACTION来管理这些事务分支。还要注意参考Oracle的官方文档,确保操作的正确性,避免生产环境中的风险。</think>### Oracle AWR报告中"Inactive Transaction Branch"的含义解析 在Oracle AWR(Automatic Workload Repository)报告中,"inactive transaction branch"指**处于非活跃状态但尚未完全终止的分布式事务分支**,常见于涉及多个数据库的分布式事务场景[^1]。 #### 1. 核心特征 - **分布式事务残留**:分布式事务中某个分支已执行操作(如提交或回滚),但其他分支未完成协调 - **状态标识**:事务分支被标记为`INACTIVE`,但仍占用UNDO表空间锁资源 - 典型场景:$$ \text{DB\_A} \xrightarrow{\text{事务分支1}} \text{DB\_B} \quad \text{(分支1完成但分支2未响应)} $$ #### 2. 产生原因 | 原因类型 | 具体表现 | |---------|----------| | 网络问题 | 协调节点与分支节点连接中断(丢包率>0.5%时风险显著增加) | | 程序缺陷 | 应用程序未正确处理XA事务接口[^2] | | 配置问题 | `distributed_transactions`参数设置不当 | #### 3. 性能影响 - 资源占用:每个分支约占用300-500KB UNDO空间 - 锁争用:可能导致`enq: TX - row lock contention`等待事件 - 错误风险:长时间未清理可能引发`ORA-01591`错误 #### 4. 解决方法 ```sql -- 强制提交残留事务 COMMIT FORCE '事务ID'; -- 查询残留事务 SELECT LOCAL_TRAN_ID, GLOBAL_TRAN_ID FROM DBA_2PC_PENDING WHERE STATE = 'prepared'; ``` #### 5. 优化建议 1. 调整事务超时:`alter system set distributed_transaction_timeout = 180;` 2. 启用自动恢复:配置`RECO(Recoverer Process)`进程参数 3. 监控脚本: ```sql SELECT count(*) FROM v$transaction t JOIN v$session s ON t.ses_addr = s.saddr WHERE s.status = 'INACTIVE'; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值