范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

慢sql治理经典案例分享

  简介:菜鸟供应链金融慢sql治理已经有一段时间,自己负责的应用持续很长时间没有慢sql告警,现阶段在推进组内其他成员治理应用慢sql。这里把治理过程中的一些实践拿出来分享下。
  作者 | 如期
  来源 | 阿里技术公众号
  菜鸟供应链金融慢sql治理已经有一段时间,自己负责的应用持续很长时间没有慢sql告警,现阶段在推进组内其他成员治理应用慢sql。这里把治理过程中的一些实践拿出来分享下。 一 全表扫描
  1 案例SELECT count(*) AS tmp_count FROM (  SELECT * FROM `XXX_rules` WHERE 1 = 1 ORDER BY gmt_create DESC ) a
  2 溯源
  在分页查询治理的文章里已经介绍过我们系统旧的分页查询逻辑,上面的查询sql明显就是分页查询获取总记录数,通过XXX_rules表的分页查询接口溯源,找到发起调用的页面是我们小二后台的一个操作商家准入的页面,页面打开后直接调用分页查询接口,除了分页参数,不传入其他任何查询参数,导致扫描全表。
  3 分析
  灵魂拷问:为什么要扫描全表?全表数据展示到页面,花里胡哨的数据有用吗?
  调研:和经常使用这个页面的运营聊后了解到,打开页面查询出的全表数据对运营是没有用的,他们根本不看这些数据。运营的操作习惯是拿到商家id,在页面查询框中输入商家id,查到商家数据后进行操作。
  4 解决方案
  由此优化方案就很明朗了:打开页面时不直接查询全量数据,等运营输入商家id后,将商家id作为参数进行查询。XXX_rules表中,商家id这一常用查询条件设置为索引,再结合分页查询优化,全表扫描慢sql得以解决。
  优化后的小二后台页面如下:
  打开页面时未查询任何数据,查询条件商家账户为必填项。
  优化后的sql为:SELECT count(*) AS tmp_count FROM (     SELECT * FROM `xxx_rules` WHERE 1 = 1 AND `rule_value` = "2928597xxx" ) a
  执行EXPLAIN得到结果如下:
  可以看到命中了索引,扫描行数为3,查询速度明显提高。
  5 思考
  扫描全表治理简单来说就是加入查询条件,命中索引,去除全表扫描查询,虽然有些粗暴,但并不是没有道理。实际业务场景中,很少有要扫描全表获取全部数据的情况,限制调用上游必须传入查询条件,且该查询条件能命中索引,能很大程度上避免慢sql。
  另外,再引申下,XXX_rules初始的用意是准入表,记录金融货主维度的准入情况,最多也就几千条数据,但是很多同事将这张表理解为规则表,写入很多业务相关规则,导致这个表膨胀到一百多万条数据,表不clean了。这就涉及到数据表的设计使用,明确表的使用规范,不乱写入数据,能给后期维护带来很大的便利。二 索引混乱
  1 示例
  2 分析
  除了时间、操作人字段,XXX_rules表就rule_name、rule_value、status、product_code四个字段,表的索引对这四个字段做各种排列组合。存在如下问题:
  1、rule_name离散度不高,放在索引首位不合适;
  2、前三个索引重合度很高;
  显然是对索引的命中规则不够了解。XXX_rules表很多业务有定时任务对其写入删除,索引多、混乱,对性能有很大的影响。
  高性能的索引有哪些,再来回顾下:
  1、独立的列:索引列不能是表达式的一部分;
  2、选择区分度高的列作为索引;
  3、选择合适的索引列顺序:将选择性高的索引列放在最前列;
  4、覆盖索引:查询的列均在索引中,不需要回查聚簇索引;
  5、使用索引扫描来做排序;
  6、在遵守最左前缀的原则下,尽量扩展索引,而不是创建索引。
  但凡记得第3和6规则,也不至于把索引建成这样。
  3 治理
  对索引进行整合如下:
  系统中有很多任务拉取整个产品下的准入记录,然后进行处理,所以将区分度较高的product_code放在索引首位,然后添加rule_name、status字段到索引里,进一步过滤数据,减少扫描行数,避免慢sql。针对常用的rule_value查询条件,可以命中UK,因此不用单独建立索引。三 非必要排序
  1 问题描述
  很多业务逻辑中,需要拉取满足某个条件的记录列表,查询的sql语句带有order by,记录比较多的情况,排序代价往往很大,但是查询出来的记录是否有序对业务逻辑没有影响,比如分页治理里讨论的count语句,只需要统计条数,order by对条数没有影响,再比如查出记录列表后,不依赖记录的顺序遍历列表处理数据,这时候order by多此一举。
  2 解决方案
  查询sql无limit语句,且业务处理逻辑不依赖于order by后列表记录的顺序,则去除查询sql中的order by语句。四 粗粒度查询
  1 问题描述
  业务中有很多定时任务,扫描某个表中某个产品下所有数据,对数据进行处理,比如:SELECT * FROM XXX_rules     WHERE rule_name = "apf_distributors"       AND status = "00"       AND product_code = "ADVANCE"
  三个查询条件都是区分度不高的列,查出的数据有27W条,加索引意义也不大。
  2 分析
  实际业务量没那么大,顶多几千条数据,表里的数据是从上游同步过来的,最好的办法是让上游精简数据,但是由于业务太久远,找上游的人维护难度太大,因此只能想其他的办法。
  这个定时任务目的是拉出XXX_rules表的某些产品下的数据,和另一张表数据对比,更新有差异的数据。每天凌晨处理,对时效性没有很高的要求,因此,能不能转移任务处理的地方,不在本应用机器上实时处理那么多条数据?
  3 解决方案
  数据是离线任务odps同步过来的,首先想到的就是dataWork数据处理平台。
  建立数据对比任务,将定时任务做的数据对比逻辑放到dataWork上用sql实现,每天差异数据最多几百条,且结果集含有区分度很高的列,将差异数据写入odps表,再将数据回流到idb。
  新建定时任务,通过回流回来的差异数据中区分度高的列作为查询条件查询XXX_rules,更新XXX_rules,解决了慢sql问题。
  这个方法的前提是对数据实效性要求不高,且离线产出的结果集很小。五 OR导致索引失效
  1 案例SELECT count(*) FROM XXX_level_report WHERE 1 = 1   AND EXISTS (     SELECT 1     FROM XXX_white_list t     WHERE (t.biz_id = customer_id         OR customer_id LIKE CONCAT(t.biz_id, "@%"))       AND t.status = 1       AND (t.start_time <= CURRENT_TIME         OR t.start_time IS NULL)       AND (t.end_time >= CURRENT_TIME         OR t.end_time IS NULL)       AND t.biz_type = "GOODS_CONTROL_BLACKLIST"   )
  2 分析
  explain上述查询语句,得到结果如下:
  XXX_white_list表有将biz_id作为索引,这里查询XXX_white_list表有传入biz_id作为查询条件,为啥explain结果里type为ALL,即扫描全表?索引失效了?索引失效有哪些情况?
  索引失效场景
  1、OR查询左右有未命中索引的;
  2、复合索引不满足最左匹配原则;
  3、Like以%开头;
  4、需要类型转换;
  5、where中索引列有运算;
  6、where中索引列使用了函数;
  7、如果mysql觉得全表扫描更快时(数据少时)
  上述查询语句第8行,customer_id为XXX_level_report表字段,未命中XXX_white_list表索引,导致索引失效。
  3 解决方案
  这个语句用condition、枚举、join花里胡哨的代码拼接起来的,改起来好麻烦,而且看起来"OR customer_id LIKE CONCAT(t.biz_id, "@%")"这句不能直接删掉。最后重构了该部分的查询语句,去除or查询,解决了慢sql。
  本文为阿里云原创内容,未经允许不得转载。

本田不看好汽车电动化全球联盟,认为这是产品无法盈利的权宜之计近日,本田汽车CEO三部敏宏表示,若电动产品能早日盈利的话,本田汽车愿意结盟,下一代动力电池或将成为本田赢得电动化竞争的关键。三部敏宏在一场新闻发布会上被问及对电动化全球联盟的看法全系产品涉嫌侵权遭宁德时代起诉,中航锂电始终自研据报道,宁德时代已正式起诉中航锂电,后者全系产品涉嫌侵犯前者专利权。宁德时代表示,此次起诉的侵权案涉及发明与实用新型专利,涉嫌侵权的电池已被数万辆汽车采用。7月21日晚间,中航锂电富士康董事长2023年在美国量产电动车,向生产高科技产品转型富士康母公司鸿海集团近日公开了今年第二季度财报。数据显示,公司该季度净利润为297。8亿新台币,营业利润为324。8亿新台币,两项数据均超出市场预期,这也让富士康有更多的资金开展其11城启动新能源汽车换电模式试点,续航焦虑靠它解决?新能源汽车的续航焦虑一直是广大车主的一块心病,找不到充电桩充电速度慢等通病更是让情况雪上加霜。为了解决这个问题,除了增加充电桩数量改进充电技术外,还有另一种解决方案也进入了大众的视91十条奥迪宣布Allinetron,许家印表示恒驰将实现产销500万辆1百度集团资深副总裁智能驾驶事业群总经理李震宇宣布,今年年内,Apollo智驾区域将会覆盖20个城市的城市道路与高速道路,2023年前完成100城覆盖。自动驾驶车辆也将迎来量产高峰91十条福特高管朱江或入职小米汽车,大众电动车交付量增长一倍1福特中国电动车事业部首席运营官朱江今日正式离职。业内人士表示,朱江下一站将就职于小米汽车。此前朱江入职滴滴汽车的消息已被本人否认。朱江于2020年6月1日正式入职福特中国,担任纯91十条集度投资500亿元造车,2030年我国或量产L5自动驾驶车辆1百度与吉利的电动汽车合资公司集度汽车近日透露,计划招聘2500到3000人,其中包括400到500名软件工程师,投入500亿元人民币用于制造智能汽车,力争在三年内推出首款电动汽车百度开启自动驾驶出租车商业化进程,原首汽约车CEO魏东正式加盟百度Apollo今日宣布,原首汽约车CEO魏东正式加盟,担任百度智能驾驶事业群副总裁百度智能驾驶事业群首席安全运营官,具体负责百度Apollo自动驾驶出租车的商业运营业务。百度的A比亚迪新能源汽车月销量突破三万,尚未计划停产燃油车近日,中国汽车工业协会发布的汽车产销数据显示,今年5月,新能源汽车销量为21。7万辆,同比增长160,环比增长5。4。今年15月,新能源汽车销量为95万辆,同比增长220。可以看出长城汽车承诺2045年实现碳中和,9月将推出全新插混车品牌在6月28日举办的长城汽车2025战略发布暨第八届科技节上,董事长魏建军公开了长城汽车未来在新能源汽车上的发展目标2025年年销量达到400万辆,其中新能源汽车占比80。2045年因存在螺丝松动风险,特斯拉召回734辆进口Model3根据国家市场监督管理总局官网显示,特斯拉(北京)有限公司将在国内召回两批共计734辆进口Model3车型。首批召回车型为2019年1月12日至11月20日生产,共计311辆,召回原
vivoX80Pro携屏下前摄报到,4K屏200倍变焦,4nm强芯坐镇今年上市的旗舰机中,要说影像拍摄实力最强的当属上个月vivo品牌推出的X70Pro,该机可谓是将拍摄做到了极致,被称为年度影像旗舰。它不仅搭载了自研影像芯片V1,还有蔡司光学镜头微荣耀X20max手机配置国庆这几天天气燥热,条友们应该都堵路上了吧呲牙好了,我们谈谈荣耀即将发布的大屏手机荣耀X20max1性能搭载天机900处理器。最近,很多自媒体说什么天机1000,天机1200。讲真不小心被诺基亚G50种草,老爹也以资深诺粉的身份上线作为一个90后,印象中用的第一款手机就是诺基亚。那时候还是键盘机,但过硬的品质和体验无一不是让人为之倾倒的理由。后来进入智能机时代后诺基亚就一直没有起色,不过近日发现诺基亚推出了一奶糖加持的双模无线键盘是什么体验?ikbcS300告诉你可盐可甜如果让你送妹子一个键盘,你会送什么?低情商随手拆一个给她高情商先了解下需求是什么,然后投其所好。也就在最近,家属表示想要一个无线键盘,因为之前给她买的无线键盘被闺蜜借去了,也属于有运动首选HAKIIACTION蓝牙耳机蓝牙耳机因其无线连接,小巧便携,为大家所接受。今天入手的是一款耳挂式蓝牙运动耳机HAKIIACTION,其采用蓝牙5。2支持CVC8。0降噪技术,带防滑耳挂,真正的耳挂式运动耳机,显卡降价了,我劝购买原价显卡的人好自为之大家好!我是水生,咱们今天还是来聊聊显卡价格的问题,经过大半年的缺卡过程,依然没有放弃显卡的玩家即将迎来一波高潮。显卡终于开始降价了。从30系列显卡发布开始,显卡价格就开始不正常,实体电商一体化将给你带来哪些机遇?实体电商一体化,将使得商业体系实现重构,彻底解决恶性价格战!创造大量就业岗位,使社会技术创新获得爆发式增长!带给源头性生产类企业更多发展机会。企业无论大小,都将站在同一起跑线上!企37岁前女雇员揭露Facebook滔天罪行用放大仇恨言论算法赚钱来源cbs编辑yaxin新智元导读周日,前女雇员FrancesHaugen在美国60Minutes采访上揭露Facebook用放大仇恨言论的算法谋利。为了提高用户参与度,Faceb雷军说怦怦粉,女性听了拳头都硬了浓眉大眼的小米居然也推出了一款女性手机?虽然在官方宣传口径上见不到女性手机四个字,但小米的新款手机Civi的定位再明显不过。Blingbling的后盖,主打的粉嫩配色,强调再三的美智能合约nonce交易查询加速及取消前言作为开发者,从部署合约到合约的调用,会由于gas费用等原因,会产生莫名的各种原因。例ErrorprocessingtransactionrequestTransactionga4000元左右价位拍照性能最好的手机是哪款?荣耀30pro(麒麟9905GSoc)8G128G(UFS3。0)3999元华为nova7pro(麒麟9855GSoc)8G256G3999元一加8T(高通865)12G256G(