专栏首页杨建荣的学习笔记MySQL慢日志优化的一个案例分析

MySQL慢日志优化的一个案例分析

这是学习笔记的第 2208 篇文章

读完需要

9

分钟

速读仅需7分钟

最近在分析一个问题的时候,尝试了很多的方法,算是一个逐步明朗的过程。

首先问题的现象是慢日志报警比较多,这是一套内部运维业务的数据库,涉及两个独立的数据库,我们暂且称为devopsdb(运维管理系统数据库),taskopsdb(任务管理数据库)。

现在报警的是taskopsdb这个数据库。

在开始之前,我先说下整体的环境和架构,数据库版本是5.7.25,使用了MGR架构模式,并且略微冒一些,使用了双活的模式,从业务上来说,devopsdb和taskopsdb数据写入上是独立的,所以直接的数据冲突可能性几乎没有。

devopdb的写入是实时的,业务种类比较多,而taskopsdb的写入相对要少很多,从我的直观关键,两者的压力基本是9:1或者差异更大。

有慢日志了就进行优化吧,但是这个慢日志报告让我有些懵,可以看到里面94%的响应时间是在处理commit的请求。

从慢日志的整体情况可以看到来自于两个客户端。

我们直接看下commit相关的SQL吧,结果打开一看慢日志文件,基本就是这样的输出结果,既然是慢日志,那么影响的数据行数应该是比较明显的,但是这里看到“Rows_examined”和“Rows_sent"都是0,但是很直白的是commit的执行时间依旧很长。

问题到了这里似乎有些两难,想优化但是苦于没有太直接有效的信息,在把整个慢日志梳理了一遍之后,我开始关注那5%的慢日志信息,发现确实有几个表的扫描代价太高了,算是一个优化点。

做完优化之后,发现报警频率确实少了很多,但是问题依旧存在。每次收到这样的报警信息,总是让人感觉到不舒服。

于是我开始想有没有其他的思路和方法。

我们从报警入手,报警的阈值是统计慢日志条数超过300就报警,所以我们可以入手的一个显式指标是300个慢日志,如何找到这300个慢查询,按照近期的报警信息,可以看到这些报警的时间相对是比较固定的,比如晚上22:00,或者早上9:00这样的时间,所以问题的发生存在周期性。

基于MGR的方案自身有一些特点,我们暂且先放下,嘉定我们不了解MGR.

两个节点的数据同步,基本是这样的场景,taskopsdb的短时间产生了大量的慢日志,而这些慢日志的表现是commit,这个commit的本质其实不是taskopsdb里面存在大量的commit操作,而是因为其他原因,导致原本无害的commit操作产生了堆积或者阻塞。所以commit的部分只是表象。

另外两个节点的数据同步,devopsdb的DML,DDL才会直接影响taskopsdb的负载,也就意味着devopsdb上面的慢日志从表面来看是不会影响taskopsdb的相关操作的。

顺着这个思路,我们往下分析,我下午的时候做了一个大胆的尝试,那就是从原来的MGR的模式降级为异步双主的模式,结果就好像潮水褪去一样,这些慢日志都付出水面了。

也就意味着根本的慢日志就是taskopsdb上面的两类不起眼的慢日志,修复了索引之后,这个问题就没有出现,当然这个问题的反思还在进行中。

本文分享自微信公众号 - 杨建荣的学习笔记(jianrong-notes),作者:杨建荣

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL DBA工作突围的一个入口-慢日志

    在MySQL中,对于性能问题诊断,最开始的时候总是感觉有些束手无策,如果一个人问你,MySQL数据库响应慢了,该怎么办,如果数据库服务器CPU 100%了该怎么...

    jeanron100
  • Oracle数据库端口突然无法访问的分析(r12笔记第46天)

    最近碰到一个蛮有启发意义的案例。是数据库监听相关的,但是实际的原因却又出乎意料。 问题的反馈受益于开发同学,一个开发同学在lync上找到我,说现在一个线上业...

    jeanron100
  • 11g主库归档自动删除的小问题分析 (r8笔记第1天)

    最近在无疑中查看一个数据库的日志的时候,发现里面有这么一段内容。 Sat Feb 06 10:07:25 2016 Deleted Oracle manag...

    jeanron100
  • 一次高IO下的GC分析之旅

    【监控系统】Total time for which application threads were stopped: 67.7651070 seconds,...

    用户1205080
  • SecureCRT 配置自动记录日志

    SecureCRT 配置自动记录日志的设置很简单,可以记录所有操作、甚至操作发生的时间、根据连接的主机自动分文件夹。

    大数据工程师-公子
  • 关于Logstash中grok插件的正则表达式例子

    近期需要对Nginx产生的日志进行采集,问了下度娘,业内最著名的解决方案非ELK(Elasticsearch, Logstash, Kibana)莫属。

    石瞳禅
  • 网站日志分析完整实践【技术创造101训练营】

    分析网站日志可以帮助我们了解用户地域信息,统计用户行为,发现网站缺陷。操作会面临几个问题

    震八方紫面昆仑侠
  • ELK + Filebeat + Kafka 分布式日志管理平台搭建

    GitHub地址:https://github.com/abel-max/Java-Study-Note/tree/master

    用户5546570
  • linux查询日志命令总结

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    chenchenchen
  • graylog日志分析系统上手教程

    日志分析系统可以实时收集、分析、监控日志并报警,当然也可以非实时的分析日志。splunk是功能强大且用起来最省心的,但是要收费,免费版有每天500M的限制,超过...

    震八方紫面昆仑侠

扫码关注云+社区

领取腾讯云代金券