跳至主要內容
大厂实践 - 美团: MySQL数据库巡检系统的设计与应用

大厂实践 - 美团: MySQL数据库巡检系统的设计与应用

巡检工作是保障系统平稳有效运行必不可少的一个环节,目的是能及时发现系统中存在的隐患。我们生活中也随处可见各种巡检,比如电力巡检、消防检查等,正是这些巡检工作,我们才能在稳定的环境下进行工作、生活。巡检对于数据库或者其他IT系统来说也同样至关重要,特别是在降低风险、提高服务稳定性方面起到了非常关键作用。本文介绍了美团MySQL数据库巡检系统的框架和巡检内容,希望能够帮助大家了解什么是数据库巡检,美团的巡检系统架构是如何设计的,以及巡检系统是如何保障MySQL服务稳定运行的。


gavin-james大约 9 分钟SQL MySQLSQL MySQL
大厂实践 - 美团: 基于代价的慢查询优化建议

大厂实践 - 美团: 基于代价的慢查询优化建议

前文我们介绍了优化慢查询最直接有效的方法就是选用一个查询效率高的索引。关于高效率的索引推荐,主要在日常工作中,基于经验规则的推荐随处可见,对于简单的SQL,如select * from sync_test1 where name like 'Bobby%',直接添加索引IX(name) 就可以取得不错的效果;但对于稍微复杂点的SQL,如select * from sync_test1 where name like 'Bobby%' and dt > '2021-07-06',到底选择IX(name)、IX(dt)、IX(dt,name) 还是IX(name,dt),该方法也无法给出准确的回答。更别说像多表Join、子查询这样复杂的场景了。所以采用基于代价的推荐来解决该问题会更加普适,因为基于代价的方法使用了和数据库优化器相同的方式,去量化评估所有的可能性,选出的是执行SQL耗费代价最小的索引。


gavin-james大约 22 分钟SQL MySQLSQL MySQL
大厂实践 - 美团: SQL优化工具SQLAdvisor开源

大厂实践 - 美团: SQL优化工具SQLAdvisor开源

正如你在前文中看到的可以通过调整索引或新增索引的索引优化方式,从而达到 SQL 优化的目的。如果能够将索引优化转化成工具化、标准化的流程,减少人工介入的工作量,无疑会大大提高DBA的工作效率。本文主要介绍SQL优化的开源工具SQLAdvisor。

背景

在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务。例行 SQL 优化,不仅可以提升程序性能,还能够降低线上故障的概率。

目前常用的 SQL 优化方式包括但不限于:业务层优化、SQL逻辑优化、索引优化等。其中索引优化通常通过调整索引或新增索引从而达到 SQL 优化的目的。索引优化往往可以在短时间内产生非常巨大的效果。如果能够将索引优化转化成工具化、标准化的流程,减少人工介入的工作量,无疑会大大提高DBA的工作效率。


gavin-james大约 7 分钟SQL MySQLSQL MySQL
大厂实践 - 美团: MySQL索引原理及慢查询优化

大厂实践 - 美团: MySQL索引原理及慢查询优化

目前常用的 SQL 优化方式包括但不限于:业务层优化、SQL逻辑优化、索引优化等。其中索引优化通常通过调整索引或新增索引从而达到 SQL 优化的目的,索引优化往往可以在短时间内产生非常巨大的效果。本文旨在以开发工程师的角度来解释数据库索引的原理和如何优化慢查询。

背景

MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重。


gavin-james大约 23 分钟SQL MySQLSQL MySQL
MySQL - MySQL中SQL是如何解析的

MySQL - MySQL中SQL是如何解析的

前文我们分享了一篇文章学习一条SQL是如何在数据库中执行的,其中有一个阶段是SQL的解析。这个阶段对于更全面的SQL优化功能;多维度的慢查询分析;辅助故障分析等有很大帮助。本文主要介绍一篇美团技术团队关于SQL解析和应用的文章,希望能给一些启示。

背景

数据库作为核心的基础组件,是需要重点保护的对象。任何一个线上的不慎操作,都有可能给数据库带来严重的故障,从而给业务造成巨大的损失。为了避免这种损失,一般会在管理上下功夫。比如为研发人员制定数据库开发规范;新上线的SQL,需要DBA进行审核;维护操作需要经过领导审批等等。而且如果希望能够有效地管理这些措施,需要有效的数据库培训,还需要DBA细心的进行SQL审核。很多中小型创业公司,可以通过设定规范、进行培训、完善审核流程来管理数据库。


gavin-james大约 13 分钟SQL MySQLSQL MySQL
MySQL - 一条 SQL 的执行过程详解

MySQL - 一条 SQL 的执行过程详解

天天和数据库打交道,一天能写上几十条 SQL 语句,但你知道我们的系统是如何和数据库交互的吗?MySQL 如何帮我们存储数据、又是如何帮我们管理事务?....是不是感觉真的除了写几个 「select * from dual」外基本脑子一片空白?这篇文章就将带你走进 MySQL 的世界,让你彻底了解系统到底是如何和 MySQL 交互的,MySQL 在接受到我们发送的 SQL 语句时又分别做了哪些事情。

前言

天天和数据库打交道,一天能写上几十条 SQL 语句,但你知道我们的系统是如何和数据库交互的吗?MySQL 如何帮我们存储数据、又是如何帮我们管理事务?....是不是感觉真的除了写几个 「select * from dual」外基本脑子一片空白?这篇文章就将带你走进 MySQL 的世界,让你彻底了解系统到底是如何和 MySQL 交互的,MySQL 在接受到我们发送的 SQL 语句时又分别做了哪些事情。


gavin-james大约 21 分钟SQL MySQLSQL MySQL
MySQL - MySQL InnoDB的MVCC实现机制

MySQL - MySQL InnoDB的MVCC实现机制

MySQL 中InnoDB中实现了事务(多版本并发控制MVCC+锁), 其中通过MVCC解决隔离性问题。具体而言,MVCC就是为了实现读-写冲突不加锁,而这个读指的就是快照读, 而非当前读,当前读实际上是一种加锁的操作,是悲观锁的实现; 这里转一篇文章带你理解InnoDB中MVCC的实现机制。

前提概要

什么是MVCC?


gavin-james大约 16 分钟SQL MySQLSQL MySQL
MySQL - 主从复制与读写分离

MySQL - 主从复制与读写分离

主从复制

主要涉及三个线程: binlog 线程、I/O 线程和 SQL 线程。

  • binlog 线程 : 负责将主服务器上的数据更改写入二进制日志中。
  • I/O 线程 : 负责从主服务器上读取二进制日志,并写入从服务器的中继日志中。
  • SQL 线程 : 负责读取中继日志并重放其中的 SQL 语句。
img
img

gavin-james小于 1 分钟SQL MySQLSQL MySQL
MySQL - 分表分库

MySQL - 分表分库

水平切分

水平切分又称为 Sharding,它是将同一个表中的记录拆分到多个结构相同的表中。

当一个表的数据不断增多时,Sharding 是必然的选择,它可以将数据分布到集群的不同节点上,从而缓存单个数据库的压力。

img
img

gavin-james大约 1 分钟SQL MySQLSQL MySQL
MySQL - 性能优化

MySQL - 性能优化

使用 Explain 进行分析

Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句。

比较重要的字段有:

  • select_type : 查询类型,有简单查询、联合查询、子查询等
  • key : 使用的索引
  • rows : 扫描的行数

优化数据访问

1. 减少请求的数据量

  • 只返回必要的列: 最好不要使用 SELECT * 语句。
  • 只返回必要的行: 使用 LIMIT 语句来限制返回的数据。
  • 缓存重复查询的数据: 使用缓存可以避免在数据库中进行查询,特别在要查询的数据经常被重复查询时,缓存带来的查询性能提升将会是非常明显的。

gavin-james大约 2 分钟SQL MySQLSQL MySQL