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

慢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。
  本文为阿里云原创内容,未经允许不得转载。

没钱了?国足最新计划被曝光,高洪波做出争议决定,扬科维奇很无奈中超联赛已经重燃战火,国足主帅扬科维奇一直辗转于各大中超赛场,为国足考察新球员,毕竟即将迎来亚洲杯和世预赛,而且当前的国足阵容老化,像此前入选国足的任航谭龙等球员,都很难坚持到下届篮协处罚上海江苏的判决书很有学问实际就是没有禁李春江和李楠判决书大家都看了,学问大家也都看出来了,只是大多数人不敢说出来,或不愿意说。这个判决书的关健在第手和第四条,分别为第三条对上海久事队主教练李春江,自处罚决定作出之日起5年内中止其教12中7轰19分!宏远蓝领季后赛成得分爆点,从此不怕辽宁莫兰德了昨晚CBA四分之一决赛继续进行,广东队109比96击败广厦队,拿到了系列赛的赛点,只要再赢一场就晋级半决赛。广东队的对面,是谁也不愿意提前碰到的广厦,辽宁队有意选择季后赛对手,把广四强没有奇迹,刘泽一发挥神勇26分13板,浙江大比分20淘汰广州CBA四分之一决赛没有奇迹,Game2浙江稠州113100广州龙狮,总比分20淘汰广州,半决赛对决深圳马可波罗。浙江余嘉豪9分5篮板,刘泽一26分13篮板,王奕博2篮板6助攻,盖利多强争雄,谁能入围下一批国家消费中心城市?九派时评文朱昌俊城市研究者消费对经济增长的贡献作用,愈发受到重视。近期,杭州市商务局公布的一组数据显示,2022年,杭州以人均年消费46440元首次登上中国人均消费10强城市榜首,超过上海无间看懂方立忍被杀,才知陆风为何被闪官列入繁星计划名单陆风终于知道自己的名字也在繁星计划名单上了,而且还是闪官把他的名字列入进去的,这让很多人都百思不得其解。陆风本来驻守在幽山公馆,等待重庆和苏联特使会谈。谁知会谈地址已经变了,陆风等不拖延,不多说,不焦虑高效人士的自律宝典!自律改变命运,高效人生从自律开始!自律之路,成就卓越人生的必经之路!如果你想变得更聪明,那么就去读书吧!史蒂夫乔布斯对于大多数人来说,一天之中最幸福的时光就是从睡梦中醒来。但是,有老同学病危,看到28名同学捐款800元,我选择删除同学群老同学病危,看到28名同学捐款800元,我选择删除同学群讲述刘正义撰写明豪兄图片来源于网络侵权删除同学之情至纯至真,没有名利的杂质,没有物欲的浊流,只有共同走过的一段黄金岁月。多年中国探测车在火星仅存三个月,美国的机遇号,为何能运行15年?2021年7月23日,中国首次火星探测任务天问一号搭载的火星车祝融号成功着陆,开启了我国探索行星探测技术的新篇章。然而,不幸的是,祝融号在运行了不到三个月之后就因为天气原因失去联系流到大海的泥沙都去哪了,凭空消失了?原来地球已被一条裂缝隔开地球是我们居住的星球,它拥有丰富多彩的自然景观和生态资源,为我们提供了生存和发展的稳定基础。然而,随着人类的不断发展和进步,我们的生产活动和破坏行为也给地球带来了越来越大的影响,其旅行者2号遇40000度火墙,人类跨越星际之门面临阻碍?自从人类开始探索宇宙以来,我们已经发射了五颗星际探测器,也称为深空探测器。这些探测器的目标是前往太阳系之外,研究宇宙中的行星恒星和其他天体。1972年,先驱者10号成为了第一颗被成
林深炊烟起雪满木屋村来源人民日报图锦江木屋村全貌。何绍东摄(人民视觉)图冬日的木屋被白雪覆盖,屋前的红灯笼随风摆动。图木屋村的村民在售卖山货干蘑。图木屋村的农家小院。图均为丁思宇摄(人民视觉)图用玉米惊艳!杭州这些花开得也太好看了春节假期还剩两天,近日,杭州许多地方花开正浓,小编给大家推荐一波短途赏花游,约起孤山梅花孤山梅花,常伴于后山沿湖地带,品种主要有江梅绿萼细枝朱砂等,数量约有300株。梅园里,株株梅春樱盛开日月潭樱花季2月初浪漫登场日月潭樱花季将于二月初浪漫登场,两大必访赏樱景点九族文化村与公立暨南国际大学,也将举办多场赏樱体验活动,樱花茶会讲座自行车游程市集人文体验等,邀请大家一起来漫游日月潭,享受樱花树下年味不减,错峰出游更精彩,金昌这些热门景点你打卡了吗?2023年春节是个活力焕发年味满满的春节金昌旅游市场持续向好亲子游自驾游周边游备受青睐火星1号基地毛卜喇卍字灯城金昌市博物馆等热门景点文化场馆持续火爆春节假期虽结束却也迎来错峰出行1000公里闪击西安式旅游,离开西安之北上洛阳篇(中)上个文章记载了初五参观完兵马俑,从临潼区出来打算去洛阳,为什么要最后一天游览兵马俑,因为临潼在西安的东侧,我们要去洛阳恰恰在西安的东北侧,恰恰这个原因,才导致我们和人潮不期而遇,因化痰消肿通络散结手五里穴经穴含义手五里穴,出自灵枢本输,属手阳明大肠经,国际编号LI13。五,第五的意思里,城市居所的意思,古代有以里为寸的说法。本穴在手三里穴的上五寸处,故名手五里,别名大禁五里臂五里尺肠胃不好的人,这些养胃食物你真的吃对了吗?一起来看一下吧!生活中被胃部不适折磨的人不在少数稍微多吃一点,一整天都觉得肚子胀被冷风吹一吹或是早餐吃晚了,胃部就隐隐作痛。时间久了,人都可能变得面黄肌瘦,还会增加或加重各种疾病风险。其实,胃病三美兔秀秀济南的天鹅湖,天鹅在这里翩翩起舞这个冬季,济南鹊山水库沉砂池迎来不少大天鹅在此栖息越冬。1月28日,农历大年初七,这些来自远方的美丽精灵或展翅飞翔,或悠闲游弋,或翩翩起舞,或随意而眠,为冬日的黄河增添了诗情画意。2022年度扬州最美体育人名单揭晓扬州市体育运动学校橄榄球队等10组体育人获得殊荣全民动起来,共健好地方!今天(1月30日),2022年度扬州十大体育新闻暨最美体育人发布仪式在扬州广播电视总台举行,扬州市体育运动学校橄榄球队等10组体育人获得殊荣。2022年,扬依旧喜欢追看电视剧打开生活的正确方式的原因,一二三四五打开生活的正确方式征文在翘首期盼下,优酷独播的电视剧打开生活的正确方式开播了。发现打开生活的正确方式每一集都有弹幕,吐槽打开生活的正确方式不值得继续追看。对此,不以为然,来谈一谈,喜欢中性风看过来,冷烟灰大衣的3种穿法,帅气潇洒还耐看身为现代独立女性,很多人都偏爱长大衣的潇洒,这几年高级灰又成为很多时尚人士的热爱,这份中性感也确实潇洒。今天就来看看3个穿灰色大衣的方法,穿得更好看吧。同色系内搭风格统一灰色的长款