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

程序员不要好心办坏事

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

ampampquot红极一时ampampquot的扫地机器人为啥被人嫌弃?网友打着科技名头的玩具现在的年轻人都喜欢高科技的家居物品,平时拖地扫地都会选择扫地机器人洗地机等电器。我身边很多朋友都买了扫地机器人,不过使用感受却大相径庭。一部分朋友认为扫地机器人可以解放双手,很适合美元布局完成,中国外储缩水1800亿,增持美债却不买黄金?本文为财说得明白原创,各平台同步发布,谢绝转载。长假最后一天,我国公布了最新的外汇储备数据。由于美元不断升值的打压,国家外汇管理局的数据显示,我国的外汇储备再一次的大幅度缩水。结合滑县妹村韦国故都所在地,韦姓发源地之一跟随河南省滑县摄影家协会寻找最美打卡点摄影采风的第二天上午,我们的最后一站是万古镇西南约两三公里处河南省十大最美村落之一的妹村。妹村,原名沫子村,现在虽然是一个村,但在4000多年用小故事展现大主题石榴籽绘本丛书本书编写组著中国少年儿童出版社光明书话出版如何有形有感有效铸牢中华民族共同体意识?这是摆在广大党员干部面前的一项重要课题。近日,由中国少儿出版社出版的石榴籽绘本丛书(中国人的故事二十大代表方勤当好长江中游文明的探寻者守护者传承者编者按在以习近平同志为核心的党中央坚强领导下,按照党章规定和党中央统一部署,全国38个选举单位选举产生了2296名党的二十大代表。党的二十大代表是共产党员中的优秀分子,具有先进性和国庆假期全国安全形势总体平稳未发生重大以上灾害事故中国青年报客户端讯(中青报中青网见习记者赵丽梅)记者从应急管理部获悉,截至10月7日18时,全国安全形势总体平稳,未发生重大以上生产安全事故和自然灾害。国庆节前,应急管理部召开专题红星何以照耀中国施乾平二十大将开启实现中国梦的新篇章视频加载中编者按85年前,美国记者作家埃德加斯诺观察到中国共产党人的艰苦斗争后写成红星照耀中国一书,在西方读者中引起轰动。85年沧海桑田,斯诺笔下的那颗红星,不仅照亮了中国,闪耀的在秋风中感悟在那个秋日的下午,阳光明媚,我独自在惠山森林公园的树林中散步。秋风轻轻地吹,吹落一地的秋。我站在一棵梧桐树下,金黄色的梧桐叶从树梢上落了下来,落满了一地的秋韵。我走在枯黄的梧桐叶的文案央视封神的温柔短句。若你决定灿烂,山无遮,海无拦。撒贝宁我们与万物同行,星辰指引方向,云与光铺展成大地的模样。航拍中国山有峰顶,湖有彼岸。在人生漫漫长途中,万物皆有回转,当我们觉得余味苦涩,请你相信,落叶随风飘风很大,气温降了好多,多穿了一件薄外套,仍然感到有点冷。假期快要结束了,总得到附近走走,假装也去了旅游。到象湖湿地公园走走吧,一个人就好。游人并不多,风景也没什么特别之处,但我仍然珍惜当下如梦,从过去到现在,从现在到未来,活着的我们究竟为何活,迷茫的雾中是否有唯正确的道路。年轻时相信是唯的,可以改变世界是正常的,是可爱的。三岁了,清醒点,哥们,你能把你照顾好把家照顾
揭秘发现8亿年前不腐女尸的出现,差点推翻了人类起源俄罗斯科学家证实,在俄罗斯克科麦罗沃州地区发现的一具奇怪棺材中的女性尸体至少有8亿年历史。这一发现将极大地颠覆我们对人类历史的认识。棺材里女人的尸体,依旧是诡异的粉红色。1969年郎平全家齐聚美国跨年!住豪宅62岁愈发圆润,72岁老公形影不离上周末,前中国女排主帅郎平在社交媒体上,晒出了与丈夫姐姐姐夫的合影。四人在美国一家中餐厅吃饭,喜迎2023年。62岁的郎导,自从退休后简直是越活越年轻,她的丈夫王育成,精神状态同样与恐龙同行2恐龙时间轴恐龙作为远古地球上的一种生物,以体型巨大和种类繁多而著称。他们在地球上称霸了很久,大约生活在地球上的时间为1。75亿年。那么,本文我将给大家讲述一下恐龙时间轴线,跟亲爱的读者们一起台积电5nm芯片,8256GB不到1500,OPPOK10年前值得入手!2023年春节越来越近,选择在此刻买新手机过年,或者给长辈买新手机过年,应该是许多人的共同选择。给长辈买手机,品牌十分重要,子品牌的知名度普遍不如主品牌,线上品牌的知名度又不如线下美国或在2023年重启载人月球,并有望迎来首次商业太空行走如果一切顺利,美国将在2023年重返月球。在接下来的12个月里,美国计划了多次无人着陆,这些行动将作为美国重新实施载人登月计划的一部分。私人太空公司和国家机构都打算跨越24万英里到外媒研究发现美国极端寒冷天气与北极变暖有关据印度快报网站报道,随着一场致命的暴风雪席卷美国,截至27日已有60多人死亡。根据华盛顿邮报的一篇报道,最近发表在科学杂志网站上的一项研究揭示了北极快速变暖如何使该地区的寒冷空气比美国历史书2000多页,但其记录我国历史却短短只有20页头条创作挑战赛美国的历史教科书总共有2000多页,但描述中国的却只有短短20页,而这20页中只记着六位中国人,那么,这六位中国人究竟是谁?今天小编带大家走进这六位伟大的名人,去看看英超利兹联VS西汉姆联主场里斯联队利兹的球队在主场的时候就表现的很强势,在这个赛季开始的时候,他们就已经让切尔西学到了很多东西,埃兰路的气氛非常的热烈。这支球队的风格非常直接,他们需要花费大量的时间去逼媒体爆料武汉长江解决欠薪难度不大,但早就做好解散准备!过去一个赛季的中超联赛堪称史上最乱的一年,不仅联赛没有回到正轨,不少俱乐部也出现了欠薪甚至扣分的情况,河北队负分和丢球115个降级,武汉三镇公然对抗足协等罕见场面不断出现,这显然不小行星或再次成为地球最大威胁,我们该如何杜绝此类事件发生?(全文约2000字,看完需2分钟)未来几年,地球的上空笼罩着一个巨大的灭绝威胁小行星撞击。地球,以及所有具有岩石表面的行星和卫星,都经历过大量来自地外天体的碰撞。如果我们不采取措施航天新征程执着不变的初心!费俊龙再上太空是我毕生追求央视网消息这次执行神舟十五号载人飞行任务的指令长费俊龙是我国首批航天员,曾经担任神舟六号载人飞行任务指令长,和航天员聂海胜一起执行为期五天的飞行任务。这次神舟十五号飞行任务,距离他