墨墨导读:2020数据技术嘉年华于11月21日落下帷幕,大会历时两天,来自全国各地的数据领域学术精英、领袖人物、技术专家、从业者和技术爱好者相聚北京,见证了个人的快速成长、技术的迭代进步、行业的蓬勃发展、生态的融合共赢,以及市场的风云变迁。

2020数据技术嘉年华近50个PPT下载、视频回放已上传墨天轮平台,可在“数据和云”公众号回复关键词“DTC2020”获得!

本文根据 罗海雄 老师在 2020数据技术嘉年华 分享的主题《另辟蹊径 -- 从其他角度去解决数据库问题》整理而成。

罗老师是一名 Oracle ACE-A,还是ITPUB论坛数据库管理版版主,2012 ITPUB全国SQL大赛冠军得主;资深的架构师和性能优化专家,对 SQL 优化和理解尤其深入;作为业内知名的技术传播者之一,经常出席各类技术分享活动;从开发到性能管理,有着超过10年的企业级系统设计和优化经验;曾服务于甲骨文公司,组织和主讲过多次《甲骨文技术开发人员日》和《Oracle圆桌会议》,在任职甲骨文公司之前,还曾经服务于大型制造企业中芯国际,具备丰富的制造行业系统架构经验。

接下来,我们跟随罗老师的文字,一同回顾属于他的嘉年华瞬间。

作为开场白,罗老师说:

我小孩经常问我,你做的什么工作?
我回答,数据库服务?
小孩又问,什么是数据库服务?
我说,数据库服务就是数据库的医生啊,数据库生了病,爸爸帮它治。

上面这个图,是一张数据库的DB Time的图,下面这一张,是一张心电图。

作为一个医生,如果看到心电图突然异常波动,肯定会特紧张;同样,一个DBA, 看到自己管理的数据的DB Time异常跳高,估计也会很紧张的。

从医院这,联想到一个“笑话”:

一个医院,在重症监护室,死亡率从某个时候起突然高起来,而经过医生的分析,每天早上8点的死亡率,比其他时间段高很多…

下面的故障,和这个“笑话”有异曲同工之妙:

客户系统某天告警,15:10-15:25 系统卡顿

语句都是最简单的insert相关 :

insert into xxx values(…,…)

从等待事件看,最严重的是gc current multi block request.

GC等待,本质上就是节点间的交互

gc主要的等待有三类

current请求就是访问数据块本身, 发生于DML

cr请求就是根据不同情况访问数据块本身或者前镜像(undo),主要发生于查询。

对于GC等待,主要有3种方法:

而这个客户的情况是这样的:


检查x$bh/v$bh, 发现部分块在节点2也存在,怀疑是统计信息收集导致部分块在节点2的buffer cache里也存在

select count(*),owner from x$bh h ,dba_objects o where o.data_object_id = h.obj

于是采取了第一步的措施:

  • 强制统计信息收集在节点1上运行

  • 强行flush 节点2的buffer cache

    altersystem flush buffer cache;

客户甚至还找停机时间,重启了节点2。

结果第二第三天,问题还是持续发生,而且,时间点都还在差不多的15:00附近。

这时候,想起了重症监护室的“笑话”。

一个医院,在重症监护室,死亡率从某个时候起突然高起来,而经过医生的分析,每天早上8点的死亡率,比其他时间段高很多…

原来,每天8点清洁阿姨拔掉呼吸机的电源,开始打扫卫生

于是,开始去找时间规律背后的原因。

先从lms进程开始入手,检查故障期间的Lms进程日志,发现如下日志:

2020-09-26 15:31:30.766 === Twoconsecutive receive calls took in 5945 ms ==2020-09-26 15:31:30.767 === Twoconsecutive receive calls took in 7274 ms ==2020-09-26 15:31:30.807 === Twoconsecutive receive calls took in 8494 ms ==2020-09-26 15:31:30.835 === Twoconsecutive receive calls took in 6355 ms ==

分析日志中出现这一类报错的时间规律

awk '/Two consecutive receivecalls took/{t=substr($2,1,5);wait=$(NF-2)/1000;if( wait>=3;cnt3[t]++);if( wait>=2;cnt2[t]++);if( wait>=1;cnt1[t]++);}END{for (i in cnt1)print i,cnt1[i],cnt2[i],cnt3[i]}'*lms*.trc

把结果做成图表:

发现时间规律非常明显,基本都是每6个小时出现一次日志高峰。

那么,数据库里有哪个清洁阿姨每六个小时打扫一次卫生?

在各种信息中,找到crs日志,发现crs日志产生时间也有这个规律,每6个小时产生大量日志文件。

分析15:00-16:00期间的进程信息

发现了可疑对象,一个java .. OraJavaAgentDriver进程,每6个小时调用一批crs的命令,并产生了相关的日志文件。

调用关系如下:

那么,这个java … OraJavaAgentDriver的进程是干什么的?又是哪个功能调用的呢?

搜索Oracle官网,发现OraJavaAgentDriver对应的是Oracle的cvu组件,全称是ClusterVerification Utility, 是Oracle CRS健康检查的一个工具,在CRS作为资源存在,名字是ora.cvu。

那cvu会是那个打扫卫生的阿姨吗?首先,来确认一下它的工作时间:

crsctl stat res  ora.cvu -p

看到了check_interval属性,21600正好就是6*3600, 也就说,这个进程的确是每6个小时调用一次。

由于Oracle CVU主要是初始安装时用来检查系统状况是否符合安装标准,如果后续整个集群没有硬件和操作系统变更,理论上来说,不会有变化,因此,该组件可以禁用。

禁用方法如下:

crsctl stop ora.cvucrsctl disable ora.cvu

关闭cvu后,对系统继续观察,首先,crs日志不会再出现那么多日志,lms日志里的Two consecutive receive calls信息也基本不再出现,系统中的gc current multi block request虽然还有少量出现,但时间都极短,并没有对业务产生影响,问题最终得以解决。

以上是罗老师本次嘉年华分享的案例的主要内容。

推荐阅读:144页!分享珍藏已久的数据库技术年刊

推荐下载:2020数据技术嘉年华PPT下载

2020数据技术嘉年华近50个PPT下载、视频回放已上传墨天轮平台,可在“数据和云”公众号回复关键词“DTC2020”获得!

视频号,新的分享时代,关注我们,看看有什么新发现?

数据和云

ID:OraNews

如有收获,请划至底部,点击“在看”,谢谢!

点击下图查看更多 ↓

云和恩墨大讲堂 | 一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

  点个“在看”

你的喜欢会被看到❤

另辟蹊径:从其他角度去解决数据库问题相关推荐

  1. 从作者的角度去阅读一本书-一种全新的阅读体验

    这是学习笔记的第 2373篇文章 最近在尝试和探索的新的学习方法,总体的感觉效率还是蛮高的,至少能够在短时间内有比较多的思考和产出,最近几天在进行类似的尝试,就是快速去阅读一本书,我的角度相比比较特别 ...

  2. 从需求的角度去理解Linux系列:总线、设备和驱动

    <从需求的角度去理解Linux系列:总线.设备和驱动>是一篇有关如何学习嵌入式Linux系统的方法论文章,也是从需求的角度去理解Linux系统软件的开篇.这是作者精心撰写的经验总结,希望嵌 ...

  3. 解决数据库导入导出的常见问题集解决办法

    常见问题: EXP-00091: Exporting questionable statistics(参考文章http://hi.baidu.com/weihua0722/item/c52d9cdbb ...

  4. 做自然语言的LSK 说要从哲学层面去解决语义分析问题

    http://www.ailab.cn/view/201605172793.html 按:做语义分析的工资雷锋网接触得不算少,但说要从"哲学层面"解决语义分析问题的,LSK是第一个 ...

  5. 微服务架构下,解决数据库跨库查询的一些思路

    开局先总结一下:现在很多厂都进行了微服务的开发模式,但是呢,业务的拆分的时候如果存在交叉是一件非常头大的事情,所以大家写微服务尽量不要交叉的写,比如新增用户如果已经存在在userservice里面了那 ...

  6. 从音乐的角度去理解dB

    从音乐的角度去理解dB(转载) 大家都是用计算机做音乐的高手了--呃,那位同学!别紧张嘛~看你激动的,高手其实也没什么了不起的--不信?那我问问你几个问题,你答得上来,算你了不起!我们用电脑做音乐的时 ...

  7. 从另一个角度去解读Blinker,剖析精简源码,学习开源精神,菜鸟哥还是忍不住对它下手了

    文章目录 1.解读起因 2.解读点 2.1 解读硬性要求 3.解读过程 3.1 解读理念 3.1.1 官方说明 3.2 解读组合方式 3.2.1 绿色 -- 必选宏 BLINKER_BLE -- bl ...

  8. 从思维角度去探讨epoll机制

    服务器中的epool 当前网络服务器开发中,只要涉及到并发IO,那么epool是逃不掉的话题.本文从网络通信的基本原理出发,慢慢引申出如何将一对一的通信,转化为IO复用,最后引出select/epoo ...

  9. 解决数据库读写分离(转)

    如何配置mysql数据库的主从? 单机配置mysql主从:http://my.oschina.net/god/blog/496 常见的解决数据库读写分离有两种方案 1.应用层 http://neore ...

最新文章

  1. 如何给前三条最新信息旁边加上一个红旗
  2. MySQL性能优化笔记整理
  3. java 向上取整_java 中的异常处理和常用类使用
  4. ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测
  5. r读取shape文件可视化_【R】提取 PCA 结果并利用 ggplot2 进行可视化
  6. php中文歌词,将酷狗krc歌词解析并转换为lrc歌词php源码
  7. centos标准分区调整大小_去繁化简解决CentOS下调整home和根分区大小的方法
  8. 如何成功搞垮一个团队?
  9. 静态链接库与动态链接库的区别
  10. java坐标移动题目case_用java怎样编写一个二维坐标平移程序
  11. 小议:怎样解决创建Web Application失败问题?
  12. BP神经网络预测matlab代码实现
  13. 【爬虫】Python爬虫实战,Python实现中国地铁数据可视化arcmap
  14. html给字体设置大小,如何设置html字体大小
  15. 大写汉字转阿拉伯数字c语言,把中文汉字大写数字 转换成 阿拉伯数字
  16. PTA:复数求模的类模板
  17. poscms清除html,poscms购物
  18. 封装自己的js库(二)---仿照JQuery
  19. Android 手机上利用adb shell模拟手机相关操作
  20. elasticsearch7.0.1集群搭建(最后有ES6.7的配置)

热门文章

  1. python编程学习_使用EduBlocks轻松学习Python编程
  2. 云原生 云计算_使云原生计算具有普遍性和可持续性
  3. github开源项目_GitHub项目分析,3D打印义肢和更多开源新闻
  4. Bootstrap条纹进度条
  5. Bootstrap3 表单
  6. ROS笔记(8) 服务通信
  7. ext store 数据修改_Vue 组件数据通信方案总结
  8. java学习是什么_学习JAVA有什么作用?
  9. quartz cron 每周一_quartz框架和关闭超时订单
  10. Luogu P1525 【关押罪犯】