通过v$session、v$session_wait_class,v$system_event,v$event_histogram来确定锁等待

简介: 整理自:http://blog.csdn.net/soulcq/article/details/5444361 先分别介绍着四个动态性能视图: v$session:显示每个当前会话的信息。

整理自:http://blog.csdn.net/soulcq/article/details/5444361

先分别介绍着四个动态性能视图:

v$session:显示每个当前会话的信息。

v$sesssion_wait_class:显示每个会话中,每个等待事件花费的时间。

v$system_event:

v$event_hisogram:


--1  获取等待事件
select sid,username,
     event,blocking_session,
     seconds_in_wait, wait_time
from v$session where state in ('WAITING')
     and wait_class != 'Idle';

--2  根据上面获得SID和blocking_session (即正在占用锁的SID)两个会话执行的sql
select sid, sql_text
 from v$session s, v$sql q
     where sid in (85,87)
 and (q.sql_id = s.sql_id or q.sql_id = s.prev_sql_id);
--说明上面的85是sid,87是block_session
--enq: TX - row lock contention   tx事务锁方式block

--3  从v$session_wait_class中获得等待的相关信息
 select wait_class_id,wait_class,total_waits,time_waited
 from v$session_wait_class where sid=87;

结果如下:
WAIT_CLASS_ID    WAIT_CLASS    TOTAL_WAITS    TIME_WAITED
1893977003          Other               1                        0
4217450380          Application       176                    47471
3386400367          Commit            4                         6
2723168908          Idle                  52                      108030
2000153315          Network           53                      0
1740759767          User I/O           7                        5
4108307767          System I/O       5                        0
在这个结果中,显示了每个类中会话的等待事件的次数,还有等待的时间,我们看到application这一级别中,的等待次数是176,而time_waited时间是474.71秒(原来的6986631单位是厘秒单位,百分之一秒).那么这个时候我们还可以从application等待类中寻找引起等待的原因。

--4  v$system_event视图中我们可以获得每种等待的出现次数。
我们这里的application的id为4217450380
select event,total_waits,time_waited
  from v$system_event e,v$event_name n
 where n.event_id=e.event_id
and n.wait_class_id=4217450380;

结果如下:
EVENT    TOTAL_WAITS    TIME_WAITED
enq: RO - fast object reuse    319    133
enq: TM - contention    2    0
enq: TX - row lock contention    162    47470
SQL*Net break/reset to client    14498    2284

假如我们并不知道是什么原因,导致了这个锁的争用,那我们该怎么去定位这个TX-row lock contention的问题呢?
这些数据仅仅告诉了我们ok,用户经历了162次的锁的竞争,共花费了47470厘秒,有可能大多数的等待只有1到2厘秒,那么如何在进行进一步的诊断呢?

--5  Oracle 10g还为我们提供了另外一个视图叫v$event_histogram
它标市了等待事件的周期以及会话等待某一特定事件周期的频度
select wait_time_milli,wait_count
 from v$event_histogram
where event='enq: TX - row lock contention';

结果如下:
WAIT_TIME_MILLI    WAIT_COUNT
1                              0
2                              0
4                              0
8                              0
16                            0
32                            0
64                            0
128                          0
256                          0
512                          0
1024                        0
2048                        0
4096                        162

v$event_histogram视图显示等待时间段以及在这期间会话等待某一特定事件--在这个例子中就是事务锁争用--的次数。
例如,会话等待少于4096毫秒(ms)的事件共162次。WAIT_COUNT列值之和为162.v$event_histogram视图显示,
大多数等待发生在4096毫秒的事件上,这就充分证明了该应用程序正在经历锁的争用问题,如果视图显示等待发生在1毫秒的范围内,我们就不应该认为这是锁争用的问题,因为这样短时间的等待似乎是正常的。

相关文章
|
Java Maven
解决Maven打包只有100多k的问题
解决Maven打包只有100多k的问题
518 0
|
Kubernetes 搜索推荐 数据安全/隐私保护
Containerd ctr、crictl、nerdctl 实战
Containerd ctr、crictl、nerdctl 实战
4362 1
|
6月前
|
运维 监控 前端开发
Zabbix告警分析新革命:DeepSeek四大创新场景助力智能运维
面对日益复杂的IT环境,高效分析监控数据并快速响应成为运维的关键挑战。本文深入探讨了DeepSeek与Zabbix结合的创新应用,包括一键式智能告警分析、Zabbix文档知识库助手及钉钉告警增强功能。通过部署指南和实用脚本,展示了如何提升故障排查效率,为运维工程师提供高效解决方案。
628 5
|
9月前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
230 11
|
SQL 存储 Go
SQL Server一键巡检脚本分享
SQL Server一键巡检脚本分享
471 0
|
监控 数据可视化 Go
实战 | Telegraf+ InfluxDB+Grafana 搭建服务器性能监控平台
在之前的文章《移动端UI自动化过程中的难点及应对策略》中我们讨论了影响移动端自动化稳定性的一些因素,其中宿主机环境是一个不可忽视的问题,大家都知道移动端的自动化一般都需要将设备挂载到实体服务器上运行,如果服务器宿主机出现断网或者磁盘空间不足等情况,都会在一定程度上影响自动化任务的执行,因此今天跟大家分享一下如何做服务器宿主机的监控。
621 0
实战 | Telegraf+ InfluxDB+Grafana 搭建服务器性能监控平台
|
Oracle 关系型数据库 数据库
|
监控 数据库 开发工具
使用Telegraf+Grafana监控Microsoft SQLServer数据库
使用Telegraf+Grafana监控Microsoft SQLServer数据库
323 1