字节客增慢 SQL 治理体系

慢查询 SQL 的危害包括:

  1. 性能: 慢 SQL 的执行时间过长,则会导致用户的等待时间过长,直接影响用户体验;

  2. 稳定性: 当 db 出现慢查询,一旦有其他的 DDL 操作,可能会造成整个数据库的等待;另一方面,慢 SQL 会拖垮数据库,导致正常执行的 SQL 也会变成慢 SQL。在字节的线上事故管理平台搜索慢 SQL 关键字可以看到很多由于慢 SQL 导致的事故,危害性较大。

成果

  • 发布慢 SQL 月报,整理最佳实践,头部泳道推动改进等取得了慢 SQL 数下降了近 50%,慢 SQL 周运行次数下降了一个数量级的成效;

  • 慢 SQL 配置&告警订阅持续配置率从 18% 提升到 70% 左右,持续优化中。

799ce089e8fe55ac18b1e61349eb95fa.png

名词解释

  • RDS:Relational Database Service,即字节关系型数据库服务。提供的关系数据库服务,使用的数据库产品主要以开源 MySQL 数据库为主。字节云关系型数据库服务(RDS)专注于为业务提供稳定可靠,弹性伸缩的在线数据库服务。

  • Mars:客增性能平台名称。

  • 风神 Aeolus:字节自研敏捷 BI 平台,提供灵活易用的数据查询,高效美观的报表制作,与丰富多元的数据内容。

设计方案


1. 架构图

f927ba7cdddf663b4d65f48bc5b58e66.png

2. 核心功能

2.1 全面的慢 SQL 度量看板

以字节 RDS 平台数据库的慢 SQL 数据为依据,量化管理客增每日/每周/每月的慢 SQL 数量&运行次数。按照度量看板数据推动大家及时改进存量的慢 SQL,降低数据库质量风险。例如周维度的运行次数 & 慢 SQL 条数趋势图如下所示:

af2bb459de7dad4576eb21c4f06d50ef.png a6f79867d8e252d50bae4d7e8432f0e0.png

2.2 慢 SQL 治理体系
2.2.1 rds 慢 SQL 阈值配置自动化管理

字节关系型数据库平台-RDS 提供慢 SQL 阈值配置的功能:

  • 当 SQL 执行时间超过该阈值后,会被自动 kill 终止运行,相当于慢 SQL 的容灾配置(如果一条 SQL 执行了 3 个月还在运行,结果不敢想象)

慢 SQL 阈值配置自动化管理是解决业务关联的数据库全部配置了慢 SQL 阈值信息。该部分通过线上定时巡检来实现,流程如下:

8b1561930e57780b8c07e53694996af5.png

2.2.2 Mars-慢 SQL 治理平台

在客增质量工作台搭建 Mars-客增慢 SQL 治理 Web 页面,展示相关业务的慢 SQL 现状以及排期跟进修复情况,目的是让业务同学更清晰快速了解当前业务相关,提供问题修复效率,方案如下:

a3929b0b40ac74840424d0b0c9ba2f7d.png

慢 SQL 跟进页面:

db6ed3895107b88171f372cd9769b9af.png

2.2.3 慢 SQL 风险评估模型-慢 SQL 分

当业务线存在较多慢 SQL 时,如何精准且合理的分析出哪些慢 SQL 风险最高?

我们基于关系型数据库的 Quert_time,Lock_time,Rows_sent,Rows_affected,Bytes_sent 等维度建立客增的慢 SQL 风险评估模型,给每条慢 SQL & 每个数据库打分,按照慢 SQL 分来排序,分数最高的慢 SQL 风险最高。

慢 SQL 模型如下:

10a897592ea325b32ce894d12f53bcb1.png

2.3 慢 SQL-CI 流水线准入/准出卡口建设

基于 ByteCycle(ByteCycle 字节统一能效中台)开发慢 SQL 原子节点,提供慢 SQL 相关的卡点能力。bytecycle 基于 psm 维度来构建持续集成流水线,通过提供慢 SQL 原子节点,可以方便用户插拔式使用。CI 卡点能够提供大家对慢 SQL 的重视程度以及提高慢 SQL 的改进效率。

fea3e4888a7541e0fcbe8977482a078f.png 89cad0ca1d4ea867c2bba1e1e2310fc1.png

2.4 慢 SQL 监控&告警订阅

目前提供慢 SQL 月报,每日慢 SQL 相关问题修复提醒,sqll kill lark 告警卡片等维度的信息展示和触发。相关样式如下:

  • 慢 SQL 月报

d7368538afc6108b68237bb2028c0407.png

  • 每日慢 SQL 问题修复提醒

dee44153b2c5a4e92be8273f78c9f932.png

  • 配置 db 慢查询阈值后,如果超过该阈值则该语句会被 db 自动 kill,订阅后会自动将获取到的 kill 信息发送到对应群中

547b7416d4e674af3d478b57821f3b15.png

3. Code 方案

RDS 元信息获取实现方案

61320f221d3beb54e8353122032563b0.png

数据表设计

create table cg_rds_external

(

id                int unsigned auto_increment primary key comment ‘id’,

db_name           varchar(100) default ‘’                null comment ‘db名字’,

owners            varchar(100) default ‘’                not null comment ‘db owners’,

region            varchar(100) default ‘’                not null comment ‘db部署的region’,

proxy_port_master varchar(100) default ‘’                not null comment ‘master节点的port’,

proxy_port_slave  varchar(100) default ‘’                not null comment ‘slave节点的port’,

sync_time         datetime     default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment ‘数据同步时间’

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 comment ‘rds db额外信息’;

create table cg_rds_slow_query_config

(

id             int unsigned auto_increment primary key comment ‘id’,

config_id      int                                    null comment ‘慢查询配置id’,

db_name        varchar(255) default ‘’                null comment ‘db名字’,

region         varchar(100) default ‘’                not null comment ‘db部署的region’,

port           varchar(100) default ‘’                not null comment ‘规则中的端口’,

db_role        varchar(100) default ‘’                not null comment ‘master or slave’,

max_query_time int                                    null comment ‘超时阈值,单位是秒’,

creator        varchar(100) default ‘’                null comment ‘规则创建人’,

create_time    varchar(100) default ‘’                null comment ‘规则创建时间’,

sync_time      datetime     default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment ‘数据同步时间’

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4  comment ‘rds慢查询规则配置信息’;

create table cg_rds_db_alarm_config

(

id        int unsigned auto_increment primary key comment ‘id’,

region    varchar(100) default ‘’                not null comment ‘db部署的region’,

alarm_id  int                                    null comment ‘alarm 规则id’,

db_name   varchar(255) default ‘’                null comment ‘db名字’,

type      varchar(100) default ‘’                not null comment ‘alarm type,例如lark’,

group_id  varchar(100) default ‘’                not null comment ‘lark id’,

create_time   varchar(100) default ‘’                not null comment ‘规则创建/更新时间’,

owner     varchar(100) default ‘’                not null comment ‘alarm创建人’,

sync_time datetime     default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment ‘数据同步时间’

)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4  comment ‘rds alarm配置表’;

慢 SQL 查询详情落库

fe466e7a21b4ce6f4cd0b285ee71ccf5.png

数据表

create table cg_slow_query_detail_info

(

id              int unsigned auto_increment primary key comment ‘id’,

尾声

你不踏出去一步,永远不知道自己潜力有多大,千万别被这个社会套在我们身上的枷锁给捆住了,30岁我不怕,35岁我一样不怕,去做自己想做的事,为自己拼一把吧!不试试怎么知道你不行呢?

改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

[外链图片转存中…(img-Lj0b80Df-1715050678689)]

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值