应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

慢sql治理经典案例分享

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

俄罗斯富豪阿布拉莫维奇突然宣布,交出英超球队切尔西管理权(观察者网讯)当地时间2月26日晚,英超联赛球队切尔西足球俱乐部的老板、俄罗斯亿万富翁阿布罗曼阿布拉莫维奇突然宣布,已将俱乐部管理权交给切尔西慈善基金会受托人。这一决定发……把生活搬上舞台,一群残疾人在冬残奥会开幕式上演了自己的故事伴随着一声清脆的哥哥,2022北京冬残奥会开幕式的会徽展示环节拉开了序幕。小男孩奔跑着,呼唤着,他叫左左,正在呼唤他的双胞胎兄弟右右。兄弟俩一个是健全人,一个是残疾人,携……森林故事樱花高密农行宿舍东院大门口两边各栽有一棵樱花,已好多年了。梅花谢樱花绽,在领略了冬梅的绰约丰姿后,初春的樱花就迫不及待地绽放,抢占春的先机。那缕缕香魂,悠悠韵味,隐在春的委婉中。……缺钾比缺钙危险?3个信号证明你缺钾了,建议吃4种食物来补充钾是我们人体维持正常运转的重要元素,主要分布在体内的细胞液当中,能够维持人体机能的平衡,促进新陈代谢,调节体内的酸碱平衡。生活中大家可能对钾元素了解的不是很多,其实体内缺……做人无完美,也无万事如意人的欲望是无止境的。人往高处走,水往低处流,这都是正常现象,因为,谁都想过上好生活。当你身处高位,有权有势的时候,你的朋友以及许许多多的人都知道你是谁;当你身处卑微,穷困……快来看!2021年度中国科学十大进展发布原标题:2021年度中国科学十大进展发布2022年2月28日,科学技术部高技术研究发展中心(基础研究管理中心)发布2021年度中国科学十大进展:火星探测任务天问一号探测器……河南一巨作或打水漂?耗资6亿造假古城,惹风波无数伴随着近些年,古镇古村落度假旅游的盛行,许多地区为了更好地吸引住游人,也逐渐修建大中型仿古建筑工程。因此,还闹了许多嘲笑,在其中最难堪的便是山西朔州。为了更好地建造假古镇,结论……篮网喜迎三讯!欧文信守承诺,蔡崇信财大气粗你只管努力,其余的交给天意,或许,这就是篮网当下的态度吧。面对岌岌可危的处境,留给篮网的时间所剩无几,距离常规赛结束还有11场比赛,距离季后赛队伍还差3。5个胜场,看来,这场附……教育心语抓住机会,悄悄往孩子身上加担子8岁的儿子把油漆刷得马路上、电线杆上都是,怎么办?江苏苏州的一位妈妈,给出了标准答案:先告诉儿子犯错了就要承担,然后陪儿子一起用刷子刷、热水泡,3天时间,刷掉了乱涂的油漆。3月……广东成催命判官!该放水山东5巨头狙击新疆,杜锋想夺冠没有选择北京时间3月19日,CBA的最新排名是已经正式出炉了,而现在谁能够压哨入场,他们的命运完全掌握在广东手中。目前季后赛的形势真是非常非常微妙,为什么这么说?因为截止到现在为……一场真实的对话揭露OPPO真面目!自研芯片会是未来主流吗?今年OPPO推出的FindX5系列用上了自研的NPU芯片马里亚纳X,让消费者见识到了国产手机影像实力的大幅提升,同时也使得消费者认识到国产手机开启自研芯片的新道路。不过对于手机……关晓彤背古诗引来网友争议,查过资料可以确定,这次她确实错了在《王牌对王牌》第七季的第一期节目中,关晓彤和杨迪进行了一场飞花令比赛,题目是说出带有动物的诗词,关晓彤在最后一轮的时候说出了《木兰辞》中的双兔傍地走,安能辨我是雌雄。这……
去东北必点的6道东北菜,是东北菜之魂,老板以为你是东北人来了东北,总要去领略一番长白山的巍峨吧。欣赏完长白山的美景,咱们的体力都消耗得差不多了,要及时补充能量,此时,东北地区的美食就列入了咱们的计划之中。东北地区的美食非……CBA最新排名!江苏升至榜首,辽篮排第三,吉林闯进四强北京时间10月27日,CBA联赛第八轮的较量,几番战罢,各队在积分榜的排名也有所调整。苏州9190辽宁相信赛季初没有人能料到,江苏队竟拥有如此恐怖的实力。面对上赛季……荣耀Magic4至臻版测评影像旗舰中的傻瓜相机如何把照片拍得好看?我的摄影师朋友是这么告诉我的,多拍拍就好了,一点也不难。这听起来拍照仿佛跟吃饭睡觉一样简单,真到自己上手才发现怎么拍都不对,要考虑到布景、光线、角度、……一个家庭最大的悲哀不是没钱,而是把这两个隐私告诉外人家是一个可以放松筋骨的地方。在家里,我们总是能保持最放松的样子。家人在一起,和和美美,日子也能越过越好。在家庭中,有些事情是非常重要的。有些人认为是钱,因为钱可以解决世界……利物浦或曼城是今年欧冠的冠军,今晚曼城可能大胜皇马曼城主力后卫坎塞洛(31场1球6助攻)遭遇停赛,主力后卫沃克(20场2助攻)和斯通斯(13场1球)出战存疑。皇马前锋阿扎尔(17场1助攻)、前锋约维奇(13场1球2助攻)……两个团队使用中性原子来创建量子电路通过中性原子的相干传输实现的量子信息架构。a,在我们的方法中,量子位被传输以执行与远距离量子位的纠缠门,从而实现可编程和非本地连接。原子穿梭是使用光学镊子进行的,在两个维度和多……沪指重挫5。13创2020年2月以来最大单日跌幅回顾A股历史4月25日,A股大幅下挫,沪指大跌5。13,创2020年2月以来最大单日跌幅。回归A股历史,曾有过多次单日大跌,5的单日跌幅无法排进前十。盘点A股历史上那些单日暴跌……现代男士时尚睡衣选搭指南,当你跨过家的门槛时,穿着得体并不会停止。这是给你的,它让你感觉如何。不是别人。这就是为什么好的睡衣和你衣橱里的其他衣服一样重要的原因。最好的睡衣品牌将奢华与舒适完美融合……字节跳动的28岁员工,身体透支后41小时离世2月23日,在抢救41小时后,字节跳动的员工28岁的吴某不幸离世。在这一年他的妻子刚怀孕两个月,还有按揭三十年的房贷。吴某是一名程序员,下班后去公司健身房健身一小时……助力杜兰特夺冠,拒绝加盟雄鹿联手字母哥,联盟4212后卫示好NBA联盟在上周举行了一年一度的全明星周末,之后也是休整了一周时间,这也给各支球队迎来了一个难得的喘息机会。在休赛期间,不少球队还在抓紧时间进行补强,常规赛只剩下二十多场比赛,……金星火星可怕吗?对它来说,都是弟弟如果说宇宙中最可怕的天体是什么,那么无疑是黑洞。黑洞作为极为恐怖的存在,它的体积无限小、时空曲率无限高、密度无限大;所有的一切物理定律都在中心处失效。时至今日我们对它的本……双十一家电购买清单,闭眼选经济又实惠,照着买不踩雷其实说到双十一买什么最划算、活动力度最大,那我觉得一定非家电莫属,很多家电在双十一几乎都是能以全年底价拿下。不过因为家电一般买下去就是一笔不小的花销,双十一,早买早享受!不仅品……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网