对于一些中小用户来说,日常遇到的最多的问题不外乎表空间与锁的分析。数据库表空间使用率/空间使用率分析似乎很简单,是一条SQL就能搞定的事情,实际上并不简单,这个话题容以后找时间阐述。今天就重点分析下另外一个问题,就是锁/阻塞分析。我加上了一个阻塞分析,就是说在数据库中阻塞应用的不仅仅有我们的一些常见的行锁/事务锁,表锁等锁,还有一些其他的机制,比如Oracle的GES/GCS,闩锁等,对于PostgreSQL,一些轻量级锁(lwlock)也会造成阻塞。昨天一个朋友说他们的系统最近锁表情况比较严重,有没有啥好方法来分析。我说对于当前的问题很容易分析,历史情况需要通过ASH数据分析。如果要比较简单的快速定位问题。需要把分析过程工具化。于是我做了一个例子给他演示了一下。创造了一个行锁的现场,从D-SMART的监控界面上可以看到目前有两个被阻塞的会话:

点击这个指标,看到指标详情页面:

画圈的这个工具按钮就是一个利用知识库做工具推荐的工具。

其中推荐了一个生成Oracle数据库实例会话等待链的工具,点一下看看有什么效果:

可以看出,存在一个阻塞者会话,阻塞了两个会话。这和我们前面看到的两个阻塞会话是一致的。点击阻塞者的会话详情:

可以看出这是老白通过SQLPLUS登录上去的会话,执行了一条UPDATE语句,然后没有提交。工具也发现了问题,这个会话处于事务中,并且已经空闲了20多分钟了。查看被阻塞者的情况:

发现了两个问题:

使用行锁分析工具去做分析:

发现了一个行锁,阻塞了2个会话。同时也指出系统中没有因为高并发而引起的行锁问题。上面的演示采用了一种工具化的方法来进行分析,可以快速的定位当前问题与历史问题。如果我们手头没有D-SMART这样的工具,该如何去做分析呢?如果是Oracle数据库,要分析当前锁的情况是十分简单的,因为系统提供了大量的系统视图用于锁的分析,比如v$lock,v$access。

、实际上,从Oracle 11g开始,v$session的功能有了很大的提高,利用v$session我们完全可以对当前系统中的锁和阻塞情况进行全面的分析。另外我们可以从v$sysstat系统视图中去分析锁相关的等待是否存在问题。

如果我们把这个数据每3分钟采集一次,并写入一张表,然后进行差值计算,就可以随时掌握系统中锁的情况了。如果enqueue timeouts一直在增长,那么当前肯定存在长时间的锁等待。对于Oracle来说lock timeout的时间缺省值是3秒,大多数OLTP系统中,不应该经常存在超过3秒的锁等待。max cf enq hold time这个值是记录了数据库启动以来控制文件锁的最大等待时间,我们也应该随时关注这个指标,当这个指标产生了一个新值的时候(比上一次采集的值更大),那么我们就应该注意这个采集周期里数据库是不是出现了一些不正常的状态。当我们判断出数据库的锁存在问题后,我们就需要进一步的去分析锁的具体情况了。对于当前锁或者阻塞分析,最好的工具是v$session,对于历史数据据分析,可以使用ash,ash的数据缺省保留时间和awr一样,都是7天,在日常使用中已经足够了。下面是v$session视图的内容,我省略了一些和今天要讨论的阻塞分析用不着的字段。

如果一个会话正在等待一个锁,那么这个会话的lockwait是非空的,从这个字段我们可以判断正在等待锁的会话情况。sql_exec_start也是一个十分有价值的字段,可以告诉我们当前SQL执行的启动时间,如果这个时间是比较早的,而且这条SQL很简单,那么这个会话可能就处于不正常的状态。row_wait_obj#,row_wait_file#,row_wait_block#,row_wait_row#这几个字段可以让我们知道会话正在等待的某个行锁的情况(如果等待事件是行锁)。

BLOCKING_SESSION_STATUS、BLOCKING_INSTANCE、BLOCKING_SESSION这几个字段对于分析会话阻塞情况是十分关键的,这几个字段指出本会话是否处于被阻塞的状态,以及阻塞/等待的类别。如果存在阻塞会话,则我们可以从blocking_instance和blocking_session这两个字段中知道谁阻塞了本会话。要注意的是blocking_session_stats不仅仅指出了阻塞的状态,还有可能反映出某些长时间等待某个等待事件。如果我们是在一个RAC环境中,阻塞来自于另外一个实例,那么我们可以使用gv$session这个视图做全局分析。不过对于GCS/GES的冲突比较严重的高负载系统,访问GV$的视图还是要十分小心,最好是发现存在跨实例的阻塞,再使用GV视图去做更详细的分析。

了解了上面的一些情况,接下来你就可以自己着手去写自己的阻塞分析工具了。如果我们要分析的不是当前的情况,而是历史情况又会怎么样呢?不用着急,我们有ASH数据,比如v$active_session_history视图。这个视图是对v$session的历史归档(只保留存在活跃状态的数据),因此进行锁/阻塞分析的方法十分类似。D-SMART中的等待链分析工具就是基于这两个视图的。

oracle degree 造成阻塞_数据库锁/阻塞分析的一种常用方法相关推荐

  1. informix 数据库锁表分析和解决方法

    informix 数据库锁表分析和解决方法 参考文章: (1)informix 数据库锁表分析和解决方法 (2)https://www.cnblogs.com/kongzhongqijing/arti ...

  2. c从oracle到mysql移植_数据库从oracle移植到mysql时需要进行的修改

    分页方式不同,oracle使用rownum,mysql使用limit 使用hibernate的QBC不用修改,但hql和sql都应该用统一方法修改 mysql子查询必须带别名 select * fro ...

  3. cpu 被挂起和阻塞_同步异步阻塞非阻塞并发并行讲解

    通过一个很形象的例子来说明同步异步阻塞非阻塞. 场景: 小明使用 chrome 下载一个软件. 1. 同步阻塞 小明使用 没有提醒功能的chrome 下载一个软件.小明 一直坐在电脑面前什么事也不做, ...

  4. oracle 数据库锁 lock mode 的几种类型

    0, 'None ', 1, 'Null ', 2, 'Row-S(SS) ', 3, 'Row-X(SX) ', 4, 'Share(S)', 5, 'S/Row-X (SSX) ', 6, 'Ex ...

  5. Oracle数据库性能问题分析的一种常规思路

    点击上方"数据和云" 关注我们! 这两天微信群里在讨论一个Oracle数据库性能问题引起业务问题的案例,一位朋友把分析报告发到了群里.正好有空就看了看,感觉这份报告颇有Oracle ...

  6. mysql视图有哪几种_数据库报表的视图有几种?每种视图的功能是什么?

    展开全部 1.关系视图:Oracle视图是作为数据库对象存在的,因此,创建之后也可62616964757a686964616fe4b893e5b19e31333433623732以通过工具或数据字典来 ...

  7. 数据库关机_数据库:MySQL常见的三种存储引擎InnoDB、MyISAM、MEMORY的区别?

    InnoDB.MyISAM两种存储引擎的大致区别? 1.InnoDB支持事务,MyISAM不支持, 这一点是非常之重要.事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyI ...

  8. mysql中的转换类型数据类型_数据库中转换数据类型的几种方法

    展开全部 oracle有三种最基本的数据类型,即字符型.数值型.日期型. (注意需要起别名的地方要起别名) oracle提供的单行62616964757a686964616fe4b893e5b19e3 ...

  9. mysql中 视图的优缺点_数据库视图优缺点分析

    视图作用是什么 所谓视图(View)其实是执行查询语句后得到的结果,但这个查询结果可以仿真成数据表来使用,所以有人也称它为"虚拟数据表",视图在操作上和数据表没有什么区别,但两者的 ...

最新文章

  1. 普博去该知名城市,直接先赠送80㎡公寓,每月生活补贴5000,最高100万项目经费!...
  2. 解剖科大讯飞的AI“乌托邦”
  3. Python爬虫实战(5):模拟登录淘宝并获取所有订单
  4. python标准类型内建模块_Python内建模块struct实例详解
  5. 模块-from import导入所有工具
  6. 将微服务注册到Eureka Server上
  7. 岛国小姐姐来例假时,男朋友背着她偷偷查手机......
  8. c语言程序设计题2015,2015年荐C语言程序设计等级考试习题汇编.doc
  9. 校招刷题---java选择题笔记05
  10. php 发送表单数据,php - 将表单数据发送到会话变量 - SO中文参考 - www.soinside.com...
  11. 【实用工具】原型图绘画工具推荐
  12. 微搭自定义组件库开发环境搭建教程
  13. 大数据技术原理与应用之可视化实训
  14. 华为机试(C++)真题Od
  15. 生物群落数据分析最常用的统计方法:回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法
  16. Elastic Stack(ELK6.6.2)安装及使用
  17. 概论_第2章_一维均匀分布的概率公式
  18. RNA-seq——快速下载SRA数据、解决fq文件中测序质量全为 ‘?‘ 的问题
  19. 解决png图片在IE6下的透明问题
  20. 有信号但是无法连接到移动网络连接服务器,手机无法连接到移动网络,这个怎么解决?...

热门文章

  1. openwrt下让telnetl与ssh(dropbear)共存
  2. 进入Win8安全模式的几个办法
  3. Java内存管理之软引用(Soft Reference)
  4. Linux C编程--进程间通信(IPC)2--信号处理函数
  5. debstack 安装 openstack
  6. 在 CentOS 7.0 上源码安装 Xen 4.5
  7. php 昨天开始时间_php日期处理显示:昨天、今天、本周、上一月等时间结点数据...
  8. 随机洗牌算法 银行家算法
  9. openstack(Queens版) 安装FWaaS
  10. 利用Mininet进行VxLAN验证实验