记录一次mysql的调优心得

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 前言:这是最近刚发生在公司的一次应用系统的mysql调优过程,事情的过程是这样的:公司的一个销售系统,用的是mysql数据库,在元旦的前夕突然就宕机了。差不多导致业务系统4个小时左右使用有问题; 因为这个系统乙方公司尚未完全交付,所以数据库的运维的工作,作为甲方也还未交接到我的手上,这个事情也是元旦过后上班才知道的;   其实对于这种问题我是可以不用管的,相信很多人也会选择当作不知道。

前言:这是最近刚发生在公司的一次应用系统的mysql调优过程,事情的过程是这样的:公司的一个销售系统,用的是mysql数据库,在元旦的前夕突然就宕机了。差不多导致业务系统4个小时左右使用有问题;

因为这个系统乙方公司尚未完全交付,所以数据库的运维的工作,作为甲方也还未交接到我的手上,这个事情也是元旦过后上班才知道的;

 

其实对于这种问题我是可以不用管的,相信很多人也会选择当作不知道。但是我还是想把问题找出来并解决掉,这个出于以下两个原因:

  • 业务系统有问题,受伤的是公司,作为公司的一员,当然希望公司的系统能够运行的更好;
  • 处理这个问题过后,经验的积累是一笔很重要的财富;(当然也有一些朋友更愿意出现的场景是:系统出现问题了,其他所有人都搞不定,这个时候老板又很着急,然后关键时刻我挺身而出,来一句经典台词:“我来试一下”,就像电视或电影里面的英雄一样,敲一下键盘,整个系统又恢复正常了;然后整个办公室的人都跳起来了,老板也笑了),虽然以上都是不可能发生,在一个不重视it技术的团队里,我只能像雷锋一样把默默做的把每件好事记录起来;

 

以上那么多废话,其实是给我们这些在甲方做技术的朋友们听的(特别是非互联网企业),因为有时候我们做了一件很有价值的事情,但是老板和领导却当作很平常一样。但是不管老板和领导是怎样的态度,作为我们还是要把事情做好了,如果你不明白,请百度一下苹果树的故事;

 

以下是整个问题解决的过程:

解决过程第一步:了解系统的情况,知己知彼,百战不殆

1、检查操作系统的配置:CPU、内存、还有存储空间(需要了解数据是放在本地硬盘还是在存储上面,如果是本地硬盘的话,需要了解做raid几)

2、咨询整个系统的架构:这套系统采用了主从结构,并实现了读写分离(这种读写分离不是完全的,很多及时性要求非常高的业务读还是在主库上面进行)

3、检查数据库的参数配置:数据库的版本、表的存储引擎、表空间的管理、数据库内存的配置等;

4、和业务咨询该系统的使用业务类型(OLTP或OLAP,其实很多OLTP的系统偶尔也做着OLAP的工作)

5、了解数据库的表数据量;(几千行的数据跟几百万行的数据是完全不一样的概念)

6、了解系统发生问题之前是否有相应的变更;

7、检查数据库的报错日志;

 

第二步:经过了解以上的内容之后,打开数据库的慢查询日志和没有使用索引的语句;(把运行超过10秒的语句记录下来)

这里的操作步骤,在前面的文档中已经写了,麻烦自己查找一下;

 

第三步:打开慢查询一个多星期之后发现了一个很明显的问题,这里直接上图

1 Count: 10063 Time=16.94s (170462s) Update  spkcb a
Set
gg1_id=(Select id From com_base_guige1 gg1 Where gg1.ggdm = a.gg1dm limit N ),
gg2_id=(Select id From com_base_guige2 gg2 Where gg2.ggdm = a.gg2dm limit N ),
sp_id = (Select id From com_base_shangpin sp Where sp.spdm = a.spdm),
zd_id = (Select id From com_base_kehu kh Where kh.khdm = a.drp_ckdm)
Where mid= 'S'

以上只是慢查询中的一个最最典型的例子:有一个过程在这差不多10天的时间里,运行了10063次,每次运行了16.94秒,每天平均云习惯1000次,经了解这是一个更新库存的语句。

这个表spkcb有30万的数据;

再次查询mid具有很强的选择性;

 

看到这里简直被打败了,这么一条语句,居然没有加索引。。。。。。。。。。。。。

 

第四步:列优化方案(时间跨度,是为了保证采样的典型性)

1、在一个月之内监控数据库所有超过10秒的慢查询日志;

2、在第二个月开始监控数据库所有超过5秒的慢查询日志;

3、在第三个月开始监控数据库所有超过3秒的慢查询日志;

4、在这期间业务对于一些数量大、且实时性要求不高的表建议通过类似物化视图的方式进行;

 

插曲:整个过程还让乙方提供了解决方案:分库分表、把一些应用搭建在阿里云上面……………………………………………….等等一些很炫的技术方案;(接着忽悠

 

从整个文档的记录下来,我一直在思考一个问题:为什么一个简单的索引问题,乙方公司不能发现?

思考之下,得出自己的答案:

1、乙方公司没有一个专业的DBA;

2、开发人员在设计应用的时候,工作往往停留在应用的层面,比如编写SQL语句、存储过程之类,他们往往会忽略了这个时候索引的存在,或者认为这是DBA的工作;

3、DBA一般不了解业务的情况,不会在系统正常运行时添加索引,一般都是业务反馈有问题或者系统宕掉的情况下,经过监控后才增加索引的;

4、很多人员不管是乙方还是甲方技术都还是半桶水的时候,就大谈数据库架构、应用架构,其实如果真正去观察其实很多数据库的标准方案如果研究透了,已经足够满足公司的日常运营了,这些所谓架构很大一部分是在忽悠老板的;

 

........................................................................................................................................................................

本文作者:JOHN,某上市公司DBA,业余时间专注于数据库的技术管理,从管理的角度去运用技术。

ORACLE技术博客:ORACLE 猎人笔记               数据库技术群:367875324 (请备注ORACLE管理 ) 

........................................................................................................................................................................

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
存储 关系型数据库 MySQL
2024年Java秋招面试必看的 | MySQL调优面试题
随着系统用户量的不断增加,MySQL 索引的重要性不言而喻,对于后端工程师,只有在了解索引及其优化的规则,并应用于实际工作中后,才能不断的提升系统性能,开发出高性能、高并发和高可用的系统。 今天小编首先会跟大家分享一下MySQL 索引中的各种概念,然后介绍优化索引的若干条规则,最后利用这些规则,针对面试中常考的知识点,做详细的实例分析。
353 0
2024年Java秋招面试必看的 | MySQL调优面试题
|
7月前
|
SQL 监控 关系型数据库
MySQL性能调优:监控和优化
MySQL性能调优:监控和优化
142 1
|
7月前
|
存储 关系型数据库 MySQL
Mysql高可用|索引|事务 | 调优
Mysql高可用|索引|事务 | 调优
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
193 1
|
3月前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
587 15
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
79 0
|
3月前
|
存储 缓存 关系型数据库
【MySQL调优】如何进行MySQL调优?一篇文章就够了!
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
【MySQL调优】如何进行MySQL调优?一篇文章就够了!
|
6月前
|
SQL 算法 关系型数据库
【MySQL】专栏合集,从基础概念到调优
【MySQL】专栏合集,从基础概念到调优
46 0
|
4月前
|
关系型数据库 MySQL Java
面试官:说说MySQL调优?
面试官:说说MySQL调优?
95 5
面试官:说说MySQL调优?
|
4月前
|
SQL 关系型数据库 MySQL
Mysql原理与调优-事务与MVCC
【8月更文挑战第19天】