安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

程序员不要好心办坏事

9月13日 桃花醉投稿
  开发中我们看那些散发着浓烈的badsmell的代码,总有一种要修理它的冲动!这当然是好事,说明我们有能力识别不好的东西以及维持系统健康运行的意愿。但是,但是总是无处不在,我们好心有时候会办出坏事来。下面这个真实的案例就是某同学觉得表的字符集设计得不合理,在一次需求开发中就把他改了,然而不幸的是由此导致了一个不小的线上事故,下面分享给大家1。事故的导火线
  你敢想?导致线上事故的是一个简单的DDL语句:
  ALTERTABLEtabletCONVERTTOCHARACTERSETutf8mb4;2。事故现场
  由于业务系统响应极慢,使用方反馈(早期系统没有完善的告警机制),开发排查日志发现是sql查询速度很慢,然后查询慢日志监控,看到了如下的壮观场景:
  慢sql监控信息3。事故原因分析
  为什么会有这么多慢查询呢??因为查询语句的关联字段的字符集不同,导致索引失效,sql执行变成了全表扫描,进而导致数据库实例所在机器的CPU长时间100,影响业务访问。4。事故线下重现
  我们使用连接查询时,两个表的关联字段都建有索引,但是如果两个表的关联字段的字符集不同,就会导致索引失效,不会走索引。执行下面的建表语句:CREATETABLEt1(
  idbigintNOTNULLAUTOINCREMENT,
  nameVARCHAR(64)DEFAULT,
  codeVARCHAR(16)DEFAULT,
  PRIMARYKEY(id),
  KEYidxcode(code),
  KEYidxname(name)
  )ENGINEInnoDBAUTOINCREMENT6DEFAULTCHARSETUTF8;CREATETABLEt2(
  idbigintNOTNULLAUTOINCREMENT,
  nameVARCHAR(64)DEFAULT,
  codeVARCHAR(16)DEFAULT,
  PRIMARYKEY(id),
  KEYidxcode(code),
  KEYidxname(name)
  )ENGINEInnoDBAUTOINCREMENT6DEFAULTCHARSETUTF8MB4;
  然后插入一些数据:INSERTINTOt1(id,name,code)VALUES(6,aa,);
  INSERTINTOt1(id,name,code)VALUES(7,bb,);
  INSERTINTOt1(id,name,code)VALUES(8,0,);
  INSERTINTOt1(id,name,code)VALUES(9,1,);
  INSERTINTOt1(id,name,code)VALUES(10,2,);
  INSERTINTOt1(id,name,code)VALUES(11,3,);
  INSERTINTOt1(id,name,code)VALUES(12,4,);
  INSERTINTOt1(id,name,code)VALUES(13,5,);
  INSERTINTOt1(id,name,code)VALUES(14,6,);
  INSERTINTOt1(id,name,code)VALUES(15,7,);
  INSERTINTOt1(id,name,code)VALUES(16,8,);
  INSERTINTOt1(id,name,code)VALUES(17,9,);
  INSERTINTOt2(id,name,code)VALUES(6,ff,);
  INSERTINTOt2(id,name,code)VALUES(7,hh,);
  INSERTINTOt2(id,name,code)VALUES(8,gg,);
  线上的sql形式如下:
  selectfromt2leftjoint1ont1。codet2。codewheret2。
  我们查看执行计划:
  explainextendedselectfromt2leftjoint1ont1。codet2。codewheret2。
  从下图的执行计划可以看到,查询条件t2。nameff使用了索引,而条件t1。codet2。code并没有使用表t1的索引:
  sql执行计划
  为什么两个字段的字符集不一样就不走索引了呢?这个命令SHOWWARNINGS;会给你详细的说明分析,这个命令和执行计划配合使用,简直不能再香了。你一定要去使用!如下:
  执行的warnings信息
  message全量内容如下:
  select1selecttest。t2。idASid,test。t2。nameASname,test。t2。codeAScode,test。t1。idASid,test。t1。nameASname,test。t1。codeAScodefromtest。t2leftjointest。t1on((convert(test。t1。codeusingutf8mb4)test。t2。code))where(test。t2。nameff)
  这时候已经非常清楚了,MySQL在关联字段上进行了convert转化,索引当然就失效喽!5。事故解决
  问题的解决也是简单粗暴,DBA直接改回了原来的字符集:
  ALTERTABLEttestCONVERTTOCHARACTERSETutf8;6。事故复盘
  平时让我们说索引失效的场景你可能会咔咔咔地说出不少,但是实际使用的时候却时常会犯错,实际上还是意识不强烈。不管怎么说,都要认真对待自己写下的每行代码,包括任何要上线的资源,如初始化的数据,脚本等。就拿这次事故来说,开发同学本意是觉得utf8字符集不严谨,应该使用utf8mb4,但实际上表中的code字段存储的只是数字和字母组成的字符串,早期历史原因被设计成utf8也无可厚非了。但是,我们作为后来接手者,任何改动就要小心了,避免跳坑里了。
  OK,咱们回聊
投诉 评论 转载

3个411!三局加起来才得12分!伊藤美诚碰见王曼昱吃瘪了文篮郭先生新乡WTT世界杯决赛2022的比赛来到四分之一决赛的舞台,伊藤美诚的对手是王曼昱,最终,王曼昱以30击败伊藤美诚。三局的比分分别是:114,114,114。这样……辽迷高调喊出辽宁王朝,哪来的底气?三地球迷不答应CBA半决赛和总决赛给了球迷一个错觉,首先是辽宁球迷有了错觉,他们看到辽宁队在半决赛和总决赛均占有巨大的优势,3比0横扫广东队,总决赛G1优势明显,吊打广厦队,有可能也是横扫广……双星暗淡,败走麦迪逊花园死神没魂,神仙饿了北京时间4月21日,篮网客场107114再负凯尔特人,总比分02落后!篮网最多领先17分,但绿军下半场迎来爆发,最终完成逆转。杜兰特27分6失误,17中4,欧文10分,13中4……用新鲜碰撞艺术,海信真空冰箱抖音挑战赛活力上线8月16日,海信真空冰箱抖音挑战赛正式拉开帷幕,借助拥有广阔覆盖面、超强传播力的抖音平台,通过具备高度感染力、简易模仿性的舞蹈形式,在附加奖励的机制下进行社交化传播,让真空和智……程序员不要好心办坏事开发中我们看那些散发着浓烈的badsmell的代码,总有一种要修理它的冲动!这当然是好事,说明我们有能力识别不好的东西以及维持系统健康运行的意愿。但是,但是总是无处不在,我们好……王者荣耀剑仙李白的入门教学王者荣耀这款游戏现在已经有6年的时间了,三年前最火的打野英雄李白,在所有的打野英雄中,李白的人气突破了一个亿,而且那个时候以绝对的优势碾压其他的打野英雄,例如现在人气和热度比较……冰雪复古经典攻沙元宝回收自由交易散人打金至高荣耀即可开战《冰雪复古》的游戏背景是玛法大陆上有各种各样的生物,人类的力量在其中是如此弱小,他们在这个大陆上被迫建立各种组织,来抵抗那些有着超自然能力的野兽和怪物。然而,过了一段时间,一个……提神你需要维生素B族,两道快手菜请你尝尝入夏以来多日气温居高不下,你是否感觉到四肢乏力、昏昏欲睡,一工作就想睡觉,饭吃到一半就困了?其实夏季犯困很正常,毕竟古人曾说:春乏秋困夏打盹。入夏之后,气温升高,天气变得炎热,……蚂蚁集团重启上市?妖王回归能否继续称王?华为又在憋大招了1、蚂蚁集团重启上市?证监会:没有进行这方面的评估和研究工作点评:有媒体报道,证监会成立工作组评估蚂蚁集团重启上市,请问证监会对此有何评论?证监会表示没有进行……夜读丨生命,是一场盛大的遇见作者丨彦辉主播丨雷阵雨风与雨遇见,成就了一场花开;山与海遇见,喧腾了一个远方;浪与岸遇见,宁静了一个港湾;我们与世界遇见,成就了一个人生。世间的一切,都是一场遇见。……两百多斤的男人,在球场上哭得稀里哗啦,哪个最令人动容?NBA球员都是铁骨铮铮的硬汉,但是有时候他们又是那么脆弱,两三百斤的大汉竟也会在球场上潸然泪下,有的甚至嚎啕大哭。就在13号,森林狼和快船队在争夺西部第七的附加赛中,疯狗贝弗利……一睹行星诞生的风采一睹行星诞生的风采很多行星都有卫星。不过,尽管我们已发现了数千颗系外行星,但系外卫星却一颗都没有找到。一个原因是,探测系外行星已属不易,探测系外卫星更是难上加难。但……
解晓东经商失败患抑郁症,妻子不离不弃,如今逆袭成富豪玩转地理全球17个超震撼城市卫星图散文管益农人生时时在找北东北笔记之四马化腾的这60条思考,解释了为什么是他创建了中国最成功的企业李立群三番两次翻车后,再出现已面容憔悴,再掉粉24万,精神欠孕中期的饮食原则,你知道多少?显卡滞销老黄急了?专家表示不慌,游戏玩家会接盘中超郑智谢晖斗法互交白卷168男生这样穿,让你拥有180既视感戛纳开幕状况频发证件系统崩溃被嘲,电力故障致列车晚点四小时又轰下3054,他这样打下去,库里的全明星票王就悬了斯诺克北爱公开赛首轮丁俊晖再遇一轮游,决胜局失误葬送比赛胜利隐瞒精神病结婚是否合法一个女的重新开始昵称网名女伤感冷漠2020关于奥运会的作文我心中的冬奥会(七)写作可以疗伤凤尾蕨水草好养吗,怎么养梦想的力量班主任工作计划农村初中如何开展化学课外活动张艺兴上向往5目的曝光,消除自闭是烟雾弹,取代黄磊才是真你不知道的祛痘小妙招山体滑坡后有哪些应对要求卧室阳台放洗衣机好吗

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利