捕获相关SQL: 确定这些进程因为数据访问产生了等待,可以考虑捕获这些SQL以发现问题。这里用到了以下脚本getsqlbysid.sql,该脚本通过已经session的sid,联合v$session、v$sqltext视图,获得相关session正在执行的完整SQL语句。 select sql_text from v$sqltext awhere a.hash_value = (select sql_hash_value &[......]
从v$sqltext中追踪
从v$sqltext中追踪: 在数据库出现瓶颈时,通常可以从v$session_wait找到那些正在等待资源的Session,通过Session的sid,联合v$session和v$sqltext视图可以捕获这些Session正在执行的SQL语句。 数据库运行缓慢,转换为数据库语言就是数据库可能经历了等待,那么可以通过v$session_wait(从Oracle 10g,v$session视图可以取代v$session_wait的这一诊断功能)视图来入手。查询v$session_wait获取各进程等待事件: winks@CCDB> select sid,event,p1,p1tex[......]
Oracle 11g实时SQL监控
Oracle 11g实时SQL监控: 前面提到,在Oracle Database 11g中,v$session视图增加了一些新的字段,这其中包括SQL_EXEC_START和SQL_EXEC_ID,这两个字段实际上代表了Oracle 11g的一个新特性:实时的SQL监控(Real Time SQL Monitoring)。 在Oracle 11g之前的版本,长时间运行的SQL可以通过监控v$session_longops来观察,当某个操作执行时间超过6秒,就会被记录在v$session_longops中,通常可以监控到全表扫描、全索引扫描、哈希联接、并行查询等操作;而在Oracle 11g[......]
v$session_event 和v$system_event
v$session_event 和v$system_event: 前面提到过v$session及v$session_wait视图记录了活动会话当前正在发生的等待,但是要知道一个活动会话在其生命周期可能经历很多等待,这些等待通过v$session_event视图记录。但是需要注意的是,这个视图记录的是累积信息,同一会话对于同一事件发生的多次等待会被累计。以下是一个会话的等待事件输出: sys@TQGZS> select sid,event,time_waited,time_waited_micro 2 from v$session_event 3&n[......]
v$session 和 v$session_wait
v$session 和 v$session_wait:由于v$session记录当前连接数据库的Session信息,而v$session_wait视图记录这些Session的等待,很多时候要联合这两个视图进行查询以获得更多的诊断信息。从Oracle 10g开始,为了方便用户,Oracle开始将这两个视图进行整合。 在Oracle 10gR1中,Oracle在v$session中增加关于等待事件的字段,实际上也就是把原来v$session_wait视图中的所有字段全部整合到了v$session视图中(如果进一步研究你会发现,实际上v$session的底层查询语句及X$表已经有了变化)。这一变化[......]