当前位置: 首页 > news >正文

假期前的数据库检查之主动优化(r11笔记第50天)

0?wx_fmt=gif

快要过年了,很多工作都会放下来,很多计划都会搁置下来,节前的检查还是必要的,尤其是那些看似不起眼的问题尤其需要注意。今天就处理了一起,也算是假期前的性能优化临门一脚。

一、一个不经意的问题?

做例行检查的时候,我基本会看看大体的DB time情况,是否有较大的抖动,归档频率是否频繁,近期是否有监控报警等,当然很多细则不需要一个一个去确认,打开Zabbix里面的zatree或者监控概览列表就能得到不少的信息了,或者跑个批量脚本也能得到不少信息。

我查看了一个套数据库环境,DB time看起来很低,可见资源使用率不高,负载确实也不高。

0

但是下一个指标就让我有些奇怪了,马上警觉起来。

0

    这是什么情况,每个小时的归档切换量有20多次,这个不大正常啊,看看以前,这个列表中列举出了近半个月的情况,可以看到年初的时候是正常的,但是从某一个时间点开始归档量一下子提升了不少,而且看起来很稳定。

    毋庸置疑,对于一名DBA来讲,应该得有这样的“嗅觉”。

这是一个看起来不太起眼的问题,但是确实是个问题。

二、前期的分析?

  当然这个时候我没有着急去找开发同学,而是自己先分析了一通,看看到底可能是什么原因导致的,抓取了应AWR报告,但是因为负载不高,从报告里面其实看不是很清晰,那么还有什么办法能更直接呢,直接抽取日志。

  我们可以使用Logminer来抽取redo日志,看看里面到底都装了些什么,这样问题就很清晰了,这个步骤也算是轻车熟路,可以参考之前的一个链接

   所以说,我是毫无保留的把脚本贡献出来了,也同时方便了我自己。

   打开解析后的日志,我立马明白问题大概的方向了,因为这个问题和之前碰到的另外一个有些类似。

但是还是略有一些差别,解析后的redo里面的内容基本都是一些insert,delete操作,而且是同一个表,表的数据量大概是200万左右,总体数据量也没有很明显的抖动,平平稳稳。但是就是这样的插入,删除。

     无论如何,问题已经找到了不少的信息,我觉得可以和开发同学谈谈了。

三、开发同学很给力

    这里需要表扬一下我们的开发同学,因为我们也是互相帮助,碰到问题也不是咄咄逼人,已解决问题为先。

    所以我反馈问题的时候,他们没有条件反射式的抗拒,还是很认真的听了我的描述,而且还对我表示感谢,感谢我发现这类问题。

    当然问题的情况可能和我想得也不大一样,快中午了,几个同事开始集五福了,我也凑了凑热闹。然后吃完饭回来,就和开发聊起这个问题,其实我也说得很诚恳,节前检查,发现问题了最好能及时修复,明天我就要开始休假了,吧啦吧啦。

     对于这个问题,他们给我的解释是,和上次处理的那个问题还不大一样,因为另外一个系统会实时给他们推送一些近期的数据,所以他们就属于生产者-消费者模式中的消费者,不断的去接受应用这些信息,但是他们也会不断收到一些重复的信息,所以就可能产生大量,频繁的delete,insert操作,而数据量还是稳定不变。

    对这个问题的改进,基本就是能够尽可能杜绝这种频繁的改动,从源头上控制还是不大可能了,但是下游可以做到一种逻辑上的过滤,所以和开发同事的沟通之后,他们也主动建议使用merge into的方式,即发现有重复的数据,那就什么都不做,如果是新数据,则插入,这样一来问题就会极大的简化。

   

    所以问题的大体思路就是insert+delete改造成merge into,而且还是开发同学主动提出的,非常难得。

四、问题的修复验证?

    修复问题大概需要多少时间呢,开发同学说了一个给力的答案,一个小时以内就修复。所以没过多久,我就看到问题修复了。一个直观的感受就是一个小时以内没有日志切换,如此一来这个问题就得到了极大的环节,从数据库层面所做的事情就很少了。

   我也不用花功夫去调节归档删除频率,调节闪回区大小等。

    这种主动的优化方式虽然还没有直接修复问题,但是已经极大的缓解了问题,我想DB time只是一个基础的指标,这个指标之下还有很多内容需要挖掘。

     能不能给数据库一个基本的指标,就跟游戏里的生命值一样的东西,我估且叫它为生命线吧。能把这些指标值糅合,给数据库一个指标值,我想处理问题也会如虎添翼。

    最后给大家一点建议,可能和技术无关,也可能有关,看你的理解了。

0?wx_fmt=jpeg

  现在朋友圈已被沦陷,未来一周还是,你自己想想,深度技术文章你有没有耐心看,收藏了多少而没有看,你自己是否好好总结过。热点事件,大量有趣的时事新闻,你是看看呢,还是逐渐迷失。

   说到迷失,我想起了那部美剧。let it go.

0

  

相关文章:

  • 回家(r11笔记第51天)
  • 新春快乐(r11笔记第57天)
  • 一个闪回区报警的数据恢复(r11笔记第62天)
  • 一个细小的空间问题触发的报警(r11笔记第68天)
  • Oracle Data Guard延迟的原因(r11笔记第69天)
  • 那些年我们追过的拳皇 (r11笔记第76天)
  • 今天比较忙比较累
  • 换工作这件事(一)(r11笔记第81天)
  • 浅谈MySQL Group Replication(r11笔记第80天)
  • 分分钟搭建MySQL Group Replication测试环境(r11笔记第82天)
  • 当拳皇遇上数据库,会擦出什么样的火花?
  • 我的女儿二三事(六)(r11笔记第87天)
  • 古巨蜥好几吨重,但在我们智人祖先面前也是枉然 | 袁硕 一席第449位讲者
  • Oracle中的PGA监控报警分析(r11笔记第96天)
  • 学习笔记第11轮总结(r12笔记第1天)
  • 【刷算法】从上往下打印二叉树
  • Angular6错误 Service: No provider for Renderer2
  • CSS 专业技巧
  • golang中接口赋值与方法集
  • iOS编译提示和导航提示
  • JS 面试题总结
  • Mybatis初体验
  • Nacos系列:Nacos的Java SDK使用
  • vue2.0项目引入element-ui
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 每天10道Java面试题,跟我走,offer有!
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 设计模式走一遍---观察者模式
  • 算法---两个栈实现一个队列
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • # include “ “ 和 # include < >两者的区别
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (4.10~4.16)
  • (a /b)*c的值
  • (C)一些题4
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (初研) Sentence-embedding fine-tune notebook
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (三)模仿学习-Action数据的模仿
  • (三分钟)速览传统边缘检测算子
  • (一) storm的集群安装与配置
  • (转)菜鸟学数据库(三)——存储过程
  • (转)程序员技术练级攻略
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .net mvc 获取url中controller和action
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET连接MongoDB数据库实例教程
  • @Autowired 与@Resource的区别
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——
  • [ACTF2020 新生赛]Include