大厂都在用的MySQL优化方案(上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 大厂都在用的MySQL优化方案

1 SQL优化

通过show status查看各种SQL的执行效率

# 查看本session的sql执行效率
mysql> show status like 'Com_%';
+-------------------------------------+-------+
| Variable_name                       | Value |
+-------------------------------------+-------+
| Com_admin_commands                  | 0     |
...
# 查看全局的统计结果
SHOW GLOBAL STATUS LIKE 'Com_%'
# 查看服务器的状态
show global status;

结果


  • Com_select:执行select操作的次数,依次查询之累加1
  • Com_insert:执行insert操作的次数,对于批量插入的insert操作,只累加依次
  • Com_update:执行update操作的次数
  • Com_delete:执行delete的次数


上面的参数是对所有存储引擎的表进行累计,下面参数是针对InnoDB存储引擎的,累加算法略有不同


  • Innodb_rows_read
    SELECT查询返回的行数
  • Innodb_rows_insered
    执行inser操作插入的行数
  • Innodb_rows_updated
    执行UPDATE操作更新的行数
  • Innodb_rows_deleted
    执行DELETE操作删除的行数


通过上述的参数可以了解当前数据库的应用是插入更新为主还是查询操作为主,以及各类的SQL的执行比例是多少。对于更新操作的计算,是对执行次数的计数,无论提交还是回滚都会进行累加对于事务形的应用,通过Com_commit和Com_rollback可以了解事务提交和回滚的情况,对于回滚操作非常频繁的数据库,可能意味着应用编写存在的问题


  • Connections:试图连接MySql服务器的次数
  • Uptime:服务器工作时间
  • Slow_queries:慢查询的次数


2 定位执行效率低的SQL语句

假设系统经过几个月运行,用户表增长约100万数据量,DBA接到告警,CPU升高,查询越来越慢,如何定位问题并给出解决方案呢?


定位问题的方法

慢查询日志


--log-show-queries[=file_name]选项去启动

mysqlId写一个包含所有执行时间超过long_querty_time秒的sql语句的日志文件

image.png


哪些是重点?

  • Rank
  • Response time
  • Rows examine
  • min


show processlist

慢查询日志在查询结束后才记录,所以在应用反应执行效率出现问题的时候查询慢查询日志并不能定位问题。

可使用show processlist命令查看当前MySQL在进行的线程,包括线程的状态,是否锁表等,可以实时查看sql的执行情况,同时对一些锁表进行优化。

mysql> show processlist;
+----+-----------------+-----------+-----------------+---------+--------+------------------------+------------------+
| Id | User            | Host      | db              | Command | Time   | State                  | Info             |
+----+-----------------+-----------+-----------------+---------+--------+------------------------+------------------+
|  5 | event_scheduler | localhost | NULL            | Daemon  | 242579 | Waiting on empty queue | NULL             |
| 16 | root            | localhost | common_mistakes | Sleep   |    488 |                        | NULL             |
| 17 | root            | localhost | common_mistakes | Query   |      0 | starting               | show processlist |
+----+-----------------+-----------+-----------------+---------+--------+------------------------+------------------+
3 rows in set (0.00 sec)

监控

一般使用 zabbix

image.png


监控3要素:

1、采集间隔

2、指标计算方法,最大值、最小值、平均值

3、数据来源


读出的信息:

1、TPS和延迟异常飙升

2、两指标的危害?持续延迟可能导致高可用失效

3、两指标的依赖关系? TPS推升导致延迟升高

4、推到出什么性能瓶颈? TPS15K时目前架构的性能瓶颈

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
16天前
|
SQL 关系型数据库 MySQL
深入解析MySQL的EXPLAIN:指标详解与索引优化
MySQL 中的 `EXPLAIN` 语句用于分析和优化 SQL 查询,帮助你了解查询优化器的执行计划。本文详细介绍了 `EXPLAIN` 输出的各项指标,如 `id`、`select_type`、`table`、`type`、`key` 等,并提供了如何利用这些指标优化索引结构和 SQL 语句的具体方法。通过实战案例,展示了如何通过创建合适索引和调整查询语句来提升查询性能。
117 9
|
2月前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
179 3
Mysql高可用架构方案
|
2月前
|
SQL 关系型数据库 MySQL
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
MySQL慢查询优化、索引优化,是必知必备,大厂面试高频,本文深入详解,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
|
9天前
|
存储 缓存 关系型数据库
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
|
21天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化以及慢查询优化
通过本文的介绍,希望您能够深入理解MySQL索引优化和慢查询优化的方法,并在实际应用中灵活运用这些技术,提升数据库的整体性能。
61 18
|
18天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。
|
20天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化以及慢查询优化
通过本文的介绍,希望您能够深入理解MySQL索引优化和慢查询优化的方法,并在实际应用中灵活运用这些技术,提升数据库的整体性能。
22 7
|
19天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化与慢查询优化:原理与实践
通过本文的介绍,希望您能够深入理解MySQL索引优化与慢查询优化的原理和实践方法,并在实际项目中灵活运用这些技术,提升数据库的整体性能。
50 5
|
2月前
|
SQL 关系型数据库 MySQL
MySQL慢查询优化、索引优化、以及表等优化详解
本文详细介绍了MySQL优化方案,包括索引优化、SQL慢查询优化和数据库表优化,帮助提升数据库性能。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
MySQL慢查询优化、索引优化、以及表等优化详解
|
2月前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
55 2