wait_class



ORACLE等待事件类型【Classes of Wait Events】

 

每一个等待事件都属于某一类,下面给出了每一类等待事件的描述。【Every wait event belongs to a class of wait event.
The following list describes each of the wait classes.】

 

1. 管理类:Administrative

 

此类等待事件是由于DBA的管理命令引起的,这些命令要求用户处于等待状态,比如,重建索引。【Waits resulting from DBA
commands that cause users to wait (for example, an index rebuild)】

 

2. 应用程序类:Application

 

此类等待事件是由于用户应用程序的代码引起的(比如:锁等待)【Waits resulting from user application code (for example,
lock waits caused by row level locking or explicit lock commands)】

 

3. 群集类:Cluster

 

此类等待事件和真正应用群集RAC的资源有关。(比如:gc cr block busy等待事件)【Waits related to Real Application Cluster
resources (for example, global cache resources such as 'gc cr block busy'】

 

4. 提交确认类:Commit

 

此类等待事件只包含一种等待事件--在执行了一个commit命令后,等待一个重做日志写确认(也就是log file sync)【This wait class
only comprises one wait event - wait for redo log write confirmation after a commit (that is, 'log file sync')】

 

5. 并发类:Concurrency

 

此类等待事件是由内部数据库资源引起的,比如闩锁。【Waits for internal database resources (for example, latches)】

 

6. 配置类:Configuration

 

此类等待事件是由数据库或实例的不当配置造成的,比如,重做日志文件尺寸太小,共享池的大小等。【Waits caused by inadequate
configuration of database or instance resources (for example, undersized log file sizes, shared pool size)】

 

7. 空闲类:Idle

 

此类等待事件意味着会话不活跃,等待工作。比如,sql * net messages from client。【Waits that signify the session is inactive,waiting for work (for example, 'SQL*Net message from client')】

 

8. 网络类:Network

 

和网络环境相关的一些等待事件,比如sql* net more data to dblink。【Waits related to network messaging (for example,
'SQL*Net more data to dblink')】

 

9. Other

 

此类等待事件通常比较少见。【Waits which should not typically occur on a system (for example,
'wait for EMON to spawn')】

 

10. 调度类:Scheduler

 

Resource Manager related waits (for example, 'resmgr: become active')

11. 系统I/O类:System I/O

 

此类等待事件通过是由后台进程的I/O操作引起的,比如DBWR等待,db file paralle write。【Waits for background process IO
(for example, DBWR wait for 'db file parallel write')】

 

12. 用户I/O类:User I/O

 

此类等待事件通常是由用户I/O操作引起的,比如db file sequential read。【Waits for user IO (for example 'db file sequential read')】

 

 

 

参考:

 

http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/waitevents001.htm#BGGHJGII

<think>嗯,用户这次的问题是关于Oracle数据库的v$session视图,具体想了解wait_class和status字段的含义,以及Idle和inactive状态的区别。这个问题很专业,用户可能是DBA或者运维工程师,正在排查数据库性能问题。 从用户引用的资料来看,ta已经做了一些功课,比如注意到FIXED_TABLE_SEQUENCE字段可以用来监控session活跃度,还引用了关于session等待事件和inactive状态处理的讨论。不过用户似乎对wait_class的分类和两种空闲状态的区别还有些困惑。 关于wait_class字段,这是Oracle对等待事件的分类体系,12c之后有12个大类。需要特别强调"Idle"这个类,它包含的都是非工作状态的等待,比如SQL*Net message from client,这种等待通常不需要关注。其他如"User I/O"、"Concurrency"这些才是真正需要关注的性能瓶颈点。 status字段的inactive和idle区别确实容易混淆。inactive是逻辑上的"可工作但无任务"状态,比如应用连接池里的空闲连接;而idle是物理上的"无任何操作"状态。用户引用的材料3提到不处理inactive session是常见做法,这点很重要,因为kill掉它们可能导致中间件报错。 用户引用的例子4展示了FIXED_TABLE_SEQUENCE的变化,正好可以用来说明:只有活跃session这个值才会增长。这个细节可以补充进回答里,帮助用户理解监控原理。 考虑到用户正在研究session监控,可以在相关问题里加入ASH报表和等待链分析的内容,这些都是DBA常用的进阶诊断手段。另外用户似乎对中间件连接也有兴趣,所以补充了连接池配置的问题。</think>以下是Oracle数据库`v$session`视图中关键字段的解释及状态分析: --- ### **1. `wait_class` 字段含义** - **定义**:表示会话当前或最后一次等待事件的类别,用于**快速定位性能瓶颈类型**。 - **常见值及意义**: - `User I/O`:用户读写数据文件(如全表扫描、索引扫描)[^2] - `Concurrency`:锁争用(如行锁、enqueue) - `Commit`:事务提交后的日志同步等待 - `Network`:网络传输延迟 - `Idle`:**非工作状态等待**(需重点关注其他类别) - `System I/O`:后台进程的I/O操作(如DBWR写数据文件) > 📌 **关键点**:`Idle` 类中的等待(如 `SQL*Net message from client`)通常无需优化,它表示会话正等待客户端指令。 --- ### **2. `status` 字段含义** - **定义**:会话的当前活跃状态。 - **主要状态对比**: | **状态** | **含义** | **是否消耗资源** | |--------------|--------------------------------------------------------------------------|------------------| | `ACTIVE` | 正在执行SQL或PL/SQL代码 | 是 | | `INACTIVE` | **连接已建立,但无SQL执行**(如应用连接池中的空闲连接) | 否(但占用内存) | | `IDLE` | **会话完全空闲**(如SQL*Plus连接后未执行命令) | 否 | | `KILLED` | 会话被DBA强制终止 | 部分残留 | --- ### **3. `Idle` vs `Inactive` 详解** - **`IDLE` 状态**: - 会话**无任何操作**,通常由客户端工具(如SQL*Plus)建立连接后未提交任务引起。 - 示例:用户登录数据库后未执行命令,会话显示为 `IDLE`。 - **`INACTIVE` 状态**: - 会话**已完成上一个任务,正等待新指令**,常见于应用服务器的数据库连接池。 - 示例:Web应用通过连接池查询数据库后,连接返回到池中但未被复用,此时会话状态为 `INACTIVE`[^3]。 > ⚠️ **运维建议**: > - `INACTIVE` 会话可能占用内存和进程数(受 `PROCESSES` 参数限制),但**强制终止可能导致应用报错**。 > - 监控建议:结合 `FIXED_TABLE_SEQUENCE` 值变化判断活跃度(如1小时内值未增长,说明会话完全空闲)[^1][^4]。 --- ### **4. 诊断性能问题示例** ```sql -- 检查非空闲等待的活跃会话 SELECT sid, serial#, username, wait_class, event, status FROM v$session WHERE status = 'ACTIVE' AND wait_class <> 'Idle'; ``` > 此查询可快速定位正在经历性能瓶颈的会话(如长时间等待 `User I/O` 或 `Concurrency`)[^2]。 --- ### **相关问题** 1. 如何根据 `v$session` 的 `wait_class` 定位数据库性能瓶颈? 2. `INACTIVE` 会话过多会导致什么风险?如何安全清理? 3. Oracle中如何区分会话是应用连接池保持还是真正的死连接? 4. `FIXED_TABLE_SEQUENCE` 字段在会话监控中的具体实践方法? [^1]: FIXED_TABLE_SEQUENCE 用于监控会话活跃度,其值增长表示会话在处理请求。 [^2]: `v$session` 的等待事件是性能分析起点,非空闲等待指向实际瓶颈。 [^3]: 强制终止 `INACTIVE` 会话可能导致中间件错误,需谨慎操作。 [^4]: 通过对比 `FIXED_TABLE_SEQUENCE` 值变化可判断会话是否在指定时间段内活跃。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值