字节客增慢 SQL 治理体系

作者 | 房厂

项目概览

背景

慢 SQL 即执行时间超过 long_query_time 设定阈值的 SQL 语句,可通过 select @@long_query_time 查看数据库具体的慢查询阈值。另外慢 SQL 不仅仅包括 select 语句,也包括 delete,insert 等 DML 语句。

慢查询 SQL 的危害包括:

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

成果

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

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

名词解释

  • RDS:Relational Database Service,即字节关系型数据库服务。提供的关系数据库服务,使用的数据库产品主要以开源 MySQL 数据库为主。字节云关系型数据库服务(RDS)专注于为业务提供稳定可靠,弹性伸缩的在线数据库服务。
  • Mars:客增性能平台名称。
  • 风神 Aeolus:字节自研敏捷 BI 平台,提供灵活易用的数据查询,高效美观的报表制作,与丰富多元的数据内容。

设计方案

1. 架构图

2. 核心功能

2.1 全面的慢 SQL 度量看板

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

2.2 慢 SQL 治理体系

2.2.1 rds 慢 SQL 阈值配置自动化管理

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

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

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

2.2.2 Mars-慢 SQL 治理平台

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

慢 SQL 跟进页面:

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

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

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

慢 SQL 模型如下:

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

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

2.4 慢 SQL 监控&告警订阅

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

慢 SQL 月报

每日慢 SQL 问题修复提醒

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

3. Code 方案

RDS 元信息获取实现方案

数据表设计

createtablecg_rds_external
(
idintunsignedauto_incrementprimarykeycomment'id',
db_namevarchar(100) default''nullcomment'db名字',
ownersvarchar(100) default''notnullcomment'db owners',
regionvarchar(100) default''notnullcomment'db部署的region',
proxy_port_mastervarchar(100) default''notnullcomment'master节点的port',
proxy_port_slavevarchar(100) default''notnullcomment'slave节点的port',
sync_timedatetimedefaultCURRENT_TIMESTAMPnotnullonupdateCURRENT_TIMESTAMPcomment'数据同步时间'
) ENGINE=InnoDBDEFAULTCHARSET=utf8mb4comment'rds db额外信息';


createtablecg_rds_slow_query_config
(
idintunsignedauto_incrementprimarykeycomment'id',
config_idintnullcomment'慢查询配置id',
db_namevarchar(255) default''nullcomment'db名字',
regionvarchar(100) default''notnullcomment'db部署的region',
portvarchar(100) default''notnullcomment'规则中的端口',
db_rolevarchar(100) default''notnullcomment'master or slave',
max_query_timeintnullcomment'超时阈值,单位是秒',
creatorvarchar(100) default''nullcomment'规则创建人',
create_timevarchar(100) default''nullcomment'规则创建时间',
sync_timedatetimedefaultCURRENT_TIMESTAMPnotnullonupdateCURRENT_TIMESTAMPcomment'数据同步时间'
) ENGINE=InnoDBDEFAULTCHARSET=utf8mb4comment'rds慢查询规则配置信息';

createtablecg_rds_db_alarm_config
(
idintunsignedauto_incrementprimarykeycomment'id',
regionvarchar(100) default''notnullcomment'db部署的region',
alarm_idintnullcomment'alarm 规则id',
db_namevarchar(255) default''nullcomment'db名字',
typevarchar(100) default''notnullcomment'alarm type,例如lark',
group_idvarchar(100) default''notnullcomment'lark id',
create_timevarchar(100) default''notnullcomment'规则创建/更新时间',
ownervarchar(100) default''notnullcomment'alarm创建人',
sync_timedatetimedefaultCURRENT_TIMESTAMPnotnullonupdateCURRENT_TIMESTAMPcomment'数据同步时间'
)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4comment'rds alarm配置表';

慢 SQL 查询详情落库

数据表

createtablecg_slow_query_detail_info
(
idintunsignedauto_incrementprimarykeycomment'id',
db_namevarchar(255) default''nullcomment'db 名',
db_regionvarchar(255) default''nullcomment'db的region',
fingerprint_md5varchar(255) default''nullcomment'慢sql标识',
begin_timedatetimeDEFAULTCURRENT_TIMESTAMPnullcomment'慢sql的开始执行时间',
max_run_timevarchar(255) default''nullcomment'sql执行的最大耗时',
run_countintdefault0nullcomment'sql执行次数',
psm_namevarchar(255) default''nullcomment'发起sql的psm',
avg_query_timevarchar(255) default''nullcomment'平均耗时',
rds_addressvarchar(255) default''nullcomment'执行sql的rds主机ip:port',
psm_hostvarchar(255) default''nullcomment'发起查询请求的主机ip',
sync_timedatetimeNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT'数据同步时间'
) ENGINE=InnoDB
DEFAULTCHARSET=utf8mb4comment'客增慢sql记录';

慢 SQL 被 kill 的详情信息获取方案

数据表

createtablecg_kill_sql_detail_info
(
idintunsignedauto_incrementprimarykeycomment'id',
db_namevarchar(255) default''nullcomment'db 名',
db_regionvarchar(255) default''nullcomment'db的region',
db_rolevarchar(255) default''nullcomment'db节点: master slave',
begin_timedatetimeDEFAULTCURRENT_TIMESTAMPnullcomment'被kill的sql 执行开始时间',
psm_namevarchar(255) default''nullcomment'发起sql的psm',
sql_detailvarchar(2000) default''nullcomment'sql详情',
db_table_namevarchar(255) default''nullcomment'该sql的表名,如果多个表,只取第一个',
sync_timedatetimeNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT'数据同步时间'
) ENGINE=InnoDB
DEFAULTCHARSET=utf8mb4comment'rds被kill的慢sql数据统计';

Metrics 监控规则

rds 报警订阅的监控只能发现 rds 上执行的 SQL 数据,不能实时发现慢接口。故推荐使用 dbatman 的 metrics 打点来完成慢 SQL 的监控告警工作。

$key="max:toutiao.ttds.dbatman.latency.max{db=sales_manage,port=*,host=*,dc=*}"
$value=max(q($key, "3m", "1m"))/1000
warn=$value>50
runEvery=1

4. 慢 SQL 治理最佳实践与标准制定

慢 SQL 治理优化基本可分为如下 3 类:

  • 优化 shcema
  • 优化索引,尽可能构建三星索引
  • 优化查询,合理的设计查询

相关细则如下所示:

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/225584.html<

(0)
管理的头像管理
上一篇2025-04-16 23:30
下一篇 2025-04-16 23:31

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注