buffer busy waits引起的会话突增

某天,客户反映其监控平台发现其一套数据库7月20日及24日在早晨7:03分和8:09分两个时间段节点1出现会话数突增情况,持续时间较短,问题时间段应用并未受到影响,客户希望帮其查找原因。

环境为11.2.0.4的双节点RAC。

通过收集的ASH信息我们可以在7月20日的07:03分和7月24日的08: 09分看到会话出现突增情况,其他时间段会话相对较平稳,问题时间点过后,会话数再次恢复平稳。

7月20日:

7月24日:

在对问题时间段等待事件进行查看,该时间段内出现大量的”buffer busy waits”等待事件,等待的会话并无blocking session,语句类型均为INSERT,SQL_ID均为:8qy4f5hpsrmu4,而对象为98866,在7月24日,问题时间段又伴有少量的”latch: cache buffers chains”和大量的”enq: HW -contention”。

7月20日:

7月24日:

对等待事件进行汇总后,等待次数排名第一位的等待事件均为”buffer busy waits”,如下:

7月20日

7月24日

通过上面的信息在表象中看到是由于系统中大量并发INSERT语句同时向98866对象插入数据,而引起的会话数突增,且会话均等待”buffer busy waits”。

那系统中为何同时出现大量INSERT语句的会话?该时间点内应用确实发出如此多的INSERT语句?而又同时向相同的对象中插入数据产生的”buffer busy waits”?还是由于”buffer busy waits”而引起的大量会话出现阻塞?

根据应用反馈,系统中的数据插入较平稳,问题时间段业务量并未发生变化,这样可以排除第一种可能性。

先看何为”buffer busy waits”,“buffer busy waits”等待事件的发生情况为当会话以独占模式持有buffer pin锁时,其他会话以非兼容模式申请buffer pin锁,此时申请buffer pin锁的会话产生的等待事件为buffer busy waits。引起系统”bufferbusy wiats”的原因很多,常见的情况有如下情况:

1.大量的并发DML语句,修改相同的数据块

2. DML语句慢,导致以排他模式持有bufferpin时间过长(DML语句慢的原因可能由于系统redo量过高或者lgwr慢等原因导致)

另外,通过对等待事件所发生位置进行统计发现”buffer busy waits”均发生在少数的数据块中。

7月20日

7月24日

大量的会话又为何向同一个数据块中插入数据?通过对发生大量”buffer busy waits”的数据块进行dump,有如下发现:

218/4161664

19/8250

其中218/4161664为L1,19/8250为段头,L1与段头居然出现了大量的”buffer busy waits”,如果对数据插入时的机制有所了解,问题原因其实已经展现出来,在使用ASSM的段空间管理方式下,正常插入语句在向段中插入数据时,将会根据会话的pid信息计算hash值n,根据计算结果在L3/L2中选择第n个L1,这里需要注意插入时所选择的L1是在高水位线之下的L1,在根据pid计算hash值将数据插入到L1中的第n个数据块里,会话不同,插入的数据将分散到不同的块中,当L1中指向的数据块使用率出现变化(25% 50% 75% FULL)时将会修改L1中对该数据块空间使用情况标记位的修改,因其为修改,将以独占模式持有L1段头的buffer pin锁,在问题时间段内同时伴有大量的高水位推进”enq: HW - contention”等待事件,段的高水位线记录在段头,这样也解释了为什么段头会出现大量的”buffer busy waits”,其实根据上面的信息基本可以分析出是由于系统中持续插入数据,由于高水位线低(高水位线的推进是以L1中指向的块的数量进行推进),大量的数据插入时聚集在高水位线下L1中指向的数据块,而引起大量的“buffer busy waits”,导致会话突增,这种问题较少见,如果需要避免该问题,可以采用手工推高高水位的方式,这样可选择的L1数量,数据块的数量也随着增多,避免插入的数据块过于集中。

| 作者简介

杨禹航·沃趣科技高级数据库技术专家

熟悉Oracle数据库内部机制,丰富的数据库及RAC集群层故障诊断、性能调优、OWI、数据库备份恢复及迁移经验。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏MYSQL轻松学

MYSQL高性能优化总结

在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已。

2173
来自专栏数据和云

没有宫廷内斗,数据库界的延禧攻略

作者 | 张甦, 数据库领域的专家和知名人士、图书《MySQL王者晋级之路》作者,51CTO 专家博主。近10年互联网线上处理及培训经验,专注于 MySQL 数...

1202
来自专栏腾讯数据库技术

深度解析auto-increment自增列"Duliplicate key"问题

提示:公众号展示代码会自动折行,建议横屏阅读 问题描述 近期,线上有个重要Mysql客户的表在从5.6升级到5.7后master上插入过程中出现"Duplic...

1772
来自专栏JAVA高级架构

运维角度浅谈MySQL数据库优化

一个成熟的数据库架构并不是一开始设计就具备高可用、高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善。这篇博文主要谈MySQL数据库发展周期中所面临的问题...

39710
来自专栏实用工具入门教程

如何部署 MediaWiki

MediaWiki是一个流行的免费wiki软件包。它与维基百科使用的软件相同,是完全动态的,可以在LAMP堆栈上运行,利用PHP语言和MySQL数据库后端。通过...

3632
来自专栏Albert陈凯

2018-09-10 MariaDB和MySQL全面对比:选择数据库需要考虑这几点

http://www.infoq.com/cn/articles/mariadb-vs-mysql

5543
来自专栏数据和云

走向云端:Oracle SQL Developer Web 即将上线!

引言:Oracle SQL Developer 是一款免费的桌面应用,是数据库的图形用户界面,它具有 DBA 的全部功能,能够对 PL/SQL 进行开发,还有命...

1382
来自专栏Java架构沉思录

数据库分库分表如何避免“过度设计”和“过早优化”

关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引...

2202
来自专栏企鹅号快讯

一文读懂NoSQL数据库

摘要:SQL数据库对数据类型和一致性有要求,NoSQL为了速度、灵活性和规模而放弃了这些要求。 在开发应用程序时,最基本的选择之一就是是否使用SQL或NoSQL...

36310
来自专栏数据和云

insert into太慢?Roger 带你找真凶

李真旭(Roger) ACOUG 核心专家,Oracle ACE,云和恩墨技术专家 编辑手记:昨天谈到索引并不是万能的,事实上很多无用的索引给数据库带来很大的维...

4734

扫码关注云+社区

领取腾讯云代金券