假期前的数据库检查之主动优化

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

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


一、一个不经意的问题?


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

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

b423724b-ca7b-467e-a30d-56259afb88ec.png

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

9e2e3402-17de-4f3e-8c96-c1d4dd09575f.png

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

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

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

二、前期的分析?


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

  我们可以使用Logminer来抽取redo日志,看看里面到底都装了些什么,这样问题就很清晰了,这个步骤也算是轻车熟路,可以参考之前的一个链接 Oracle闪回原理-Logminer解读redo(r11笔记第17天)

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

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

insert导致的性能问题大排查(r11笔记第26天)

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

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


三、开发同学很给力


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

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

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

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

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

   

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


四、问题的修复验证?


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

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


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

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


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

e7584bc1-d972-4ff9-b451-e5b31746f791.jpg

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

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


577ecf02-3659-4168-927b-9f7fba7fa01a.jpg


  


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
JavaScript 关系型数据库 MySQL
❤Nodejs 第六章(操作本地数据库前置知识优化)
【4月更文挑战第6天】本文介绍了Node.js操作本地数据库的前置配置和优化,包括处理接口跨域的CORS中间件,以及解析请求数据的body-parser、cookie-parser和multer。还讲解了与MySQL数据库交互的两种方式:`createPool`(适用于高并发,通过连接池管理连接)和`createConnection`(适用于低负载)。
13 0
|
20天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
|
1月前
|
SQL 缓存 PHP
PHP技术探究:优化数据库查询效率的实用方法
本文将深入探讨PHP中优化数据库查询效率的实用方法,包括索引优化、SQL语句优化以及缓存机制的应用。通过合理的优化策略和技巧,可以显著提升系统性能,提高用户体验,是PHP开发者不容忽视的重要议题。
|
1月前
|
SQL 存储 JSON
阿里云数据库 SelectDB 内核 Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%
亲爱的社区小伙伴们,Apache Doris 2.1.0 版本已于 2024 年 3 月 8 日正式发布,新版本开箱盲测性能大幅优化,在复杂查询性能方面提升100%,新增Arrow Flight接口加速数据读取千倍,支持半结构化数据类型与分析函数。异步多表物化视图优化查询并助力仓库分层建模。引入自增列、自动分区等存储优化,提升实时写入效率。Workload Group 资源隔离强化及运行时监控功能升级,保障多负载场景下的稳定性。新版本已经上线,欢迎大家下载使用!
阿里云数据库 SelectDB 内核 Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%
|
1月前
|
存储 搜索推荐 关系型数据库
深度探讨数据库索引的数据结构及优化策略
深度探讨数据库索引的数据结构及优化策略
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】7、SQL 优化
【MySQL 数据库】7、SQL 优化
49 0
|
2月前
|
存储 监控 数据库
《优化数据库性能的六大技巧》
数据库作为后端开发中至关重要的一环,在实际应用中经常遇到性能瓶颈问题。本文将分享六大实用技巧,帮助开发者优化数据库性能,提升系统响应速度。
|
1月前
|
存储 关系型数据库 MySQL
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
169 0
|
20天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
7天前
|
SQL 缓存 Java
Java数据库连接池:优化数据库访问性能
【4月更文挑战第16天】本文探讨了Java数据库连接池的重要性和优势,它能减少延迟、提高效率并增强系统的可伸缩性和稳定性。通过选择如Apache DBCP、C3P0或HikariCP等连接池技术,并进行正确配置和集成,开发者可以优化数据库访问性能。此外,批处理、缓存、索引优化和SQL调整也是提升性能的有效手段。掌握数据库连接池的使用是优化Java企业级应用的关键。

热门文章

最新文章