每分钟54万多条数据更新,商品系统性能如何优化?

作者 Dmall Talker朱雪刚 多点Dmall-OS研发部

背景介绍

2020年6月,商品系统从SAP、中间层等接入的商品数据越来越多且更新频繁,商品数据库主从更新数据量大,约每分钟54application万多条更apple新,约八分钟就会产生大于1G的Binlog文件,在数据库IO能力一定的情况下,发生数据同步延迟,影响写入与读出的及时性,进而影响到商品基础系统的可用性。

如果仅是从翻阅代码缓存视频合并app下载的角度去分析,会花费大量人力。抛开系统本身,当商品多个应用都在读写商品库,并在数据库层起到数据appreciate汇总和集中反馈的情况下,分析这个点是一个较好的方向。

分析模型

把B大数据专业学什么inlog解析成Sql 纯文本,解析出来的Sql文本 样例如下:

每分钟54万多条数据更新,商品系统性能如何优化?
观察解析出来的文本,判断是否是有效更新,关键在于找到实际更新的是哪些字段。缓存视频怎样转入相册即: WHERE块中 和SET块 中 哪些字段上有值的更新。

每分钟54万多条数据更新,商品系统性能如何优化?
通过对缓存文件夹名称比发现:

每分钟54万多条数据更新,商品系统性能如何优化?
实际只更新了 第 7 和 8 号 的时间字段,如果没有刷新其他值,只是刷新了时间,估计这条更新语句没什么意义;又,商品系统接收到下发数据时,估计是我们拿到了数据后,直接用 modified=now()产生了update语句,这样时间有变化,必然产生Binlog。

基于以上逻辑,只要能分析出一条update语句中,哪些字段更新了,这些更新字段本身对业务是否有意义,来判断是否应该产生Binlo大数据技术与应用g。希望分析出的appear结果模型如下:

每分钟54万多条数据更新,商品系统性能如何优化?
通过分析表X中,字段组合 以及相应的 更新次数,可以得出:

1. 更新的 字段组合 判断出是否是有效更新;缓存视频变成本地视频

2. 相应的 更新次数 反映出有效和无效缓存视频怎样转入本地视频更新的条数、占比程度等;

组合统计

由于Binlog对应的文本量大,通过脚本把每条 Insert 、Delete、Update语句切到单独的文件中。然后计算每个文件中的S数据库是什么ql 里的字段差异并做归集。流程如下:

每分钟54万多条数据更新,商品系统性能如何优化?
统计每张表的每个字段单独更新是否有效:1表示单独更新有效,0表示单独更新无效,如以下统计样例表:

每分钟54万多条数据更新,商品系统性能如何优化?
根据以上统计表,计算每种更新语句的“更新是否有效表达式”,计算方法为:

每种更新语句的更新字段组合 的 单独更新是否有效 的数值 做加法。

如果更新字段组合中,所有字段的单独更新是否有效的值为0,则加起来的和等于0;

只要更新字段组合中,某一字段的单独更新是否有效的值为1,则加起来的和大于0;

根据 “更新是否有效表达式”缓存视频合并的和是否大于0 得出对应的更新语句是否是 有效的更新。

以商品库表以及字段为例,判断更新语句是否有效,统计表参考缓存视频怎样转入相册如下:

每分钟54万多条数据更新,商品系统性能如何优化?
根据以上统计表,无效更新的占比为:su缓存视频变成本地视频m(无效更新=0的更新量)/sum(更新量)。 结果模型举例如下图:

每分钟54万多条数据更新,商品系统性能如何优化?
这样为分析提供:定性与定量缓存文件夹名称的基础,并且知道后续优化的预期效果缓存视频怎样转入本地视频。商品系统经过优化,减少了90%以上的无效更新,并且减少了下游系统订阅商品Binlog的数据更新压力。

代码排查

初步分析是我们拿到数据后,在SqlMapper文件中: 时间字段=now(),触发了apple苹果官网实际更新产生binl大数据是什么意思og,根据实际情况修改排查,确认是否对下游系统有影响,如大数据抽数等情况做优化。

缓存的视频怎么保存到本地品系统初步的修改方法为:

1.建表时,建议按appointment照以下格式设计:

create_time dateappeartime NOT N数据库系统ULL DEFAULT CURRENT_T缓存视频怎样转入相册IMESTAMP;

update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

这样做的好处是:Insert时,created字段不需要设置;update时,modi数据库管理系统fied字数据库系统工程师段不需要设缓存视频怎样转入相册置,让业务代码更纯粹,同时也不用担心数仓拉数据的时候没更新时间;

2. 语句中,update * set * where * ,如果set 块中没有更新数据,set 和 where 直接连在一起,Sql语法会错误,在set 里面加上where 块中的条件字段,如id=#id数据库技术#, 这样让 Sql 语句语法正确。另外也遵循如果没有实际的数据数据库技术更新,不会产生binlog的规律;

其他引申

用以上的结果模型,清晰地展示出一个库的更新情况,不仅能判断出Sql语句是否是有效更新,也能appointment反馈以下些情况:

1. 数据库设计是否合理,比如在分析我们公司的X数据库设计X系统的数据库后,结论是:更大数据行程码新都是有效更新,但更新量最大的一张表有98个字段,且更新量最大的部分,只更新了表的 yn字段,由Binlog解析出来的纯文本可知,即使只更新yn字段,也会在SET和WHERE块中带上这98个字段,合计约200多行的更新语句,也触发了大量Binlog文件产生;后面缓存文件夹名称计划通过拆分表字段,通过归类数据字段、状态字段等方式来解决。

2. 给 缓存数据 提供定量依据,比如频繁更新字段,是否能用缓存的启发等;

3. 给系统负责同学提供数据库更新字段维度的透视,知道数据库实际数据库原理及应用更新了哪些字段,有无必要,还可以做哪些优化启发等;

以上通用的分析方法,特别适合于数据库更新量大的系统,以及通用的脚本分析工具快速出分析结果。

发表评论

提供最优质的资源集合

立即查看 了解详情