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

程序员不要好心办坏事

  开发中我们看那些散发着浓烈的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,咱们回聊~

php宝塔部署实战修复版掌上阅读小说PHP管理系统源码大家好啊,我是测评君,欢迎来到web测评。有朋友发了一套源码给我,让我录制一期搭建的视频教程,下载来搭建测试看了一下,是一套别人修复过了的掌上阅读小说PHP管理系统的源码,功能还是75寸性价比最高电视机是哪款?2022年双11有特价吗?几年前,75寸电视上万,现在,2599就能买到。我也是醉了。要我说这价格根本就不用双十一,日常一卖,千秋万代了。雷鸟电视鹏6SE入门款75寸电视型号75S365C,2022年4月上无与伦比的沉浸感飞利浦真环绕全景声B89677696环景光电视评测大家好,我是黄昏百分百,用电视追剧看电影,沉浸感非常重要,除了画质之外,电视整体的音效与整个观影环境都十分重要。今天我便为大家带来飞利浦75PUF7696环景光电视与飞利浦B896智能血压表能取代血压仪吗?didoE40SPro评测有惊喜有不足进入中年,身体机能逐渐退化,人不找病病找人。尤其是父母操劳了一辈子,身体都有这样那样的问题,多数以高血压心血管等疾病较为常见,为了随时掌握身体状况,在家测血压害怕不准,上医院测血压iPhone15系列变化惊喜拉满潜望式长焦USBC果粉开香槟今年的iPhone14系列似乎因为没有太大的变化,热度与往年相比是下降了不少,灵动岛可以说成为了唯一亮点了。苹果这是江郎才尽了吗?根据最新消息曝光,苹果可能将更多的变化留到了iPh还没选到心仪的户外蓝牙音箱?JBLFLIP6表现不错有人说选一款心仪的蓝牙音箱产品比在茫茫人海中遇到一个心仪的人还要难,毕竟在买回来这台音箱之前,我们并不知道这款音箱的效果是好还是不好。而且随着时代的发展,人们的消费习惯也有所改变,AppleTV入坑推荐,写在第七代2022款开售前夕本内容来源于什么值得买APP,观点仅代表作者本人作者瓜伟同学既然要说到AppleTV的选购推荐,咱们也不妨一起来了解一下AppleTV这款产品的历史。说它是TV,其实它就是个苹果的顶级家庭影院怎么配?音响配置方案及选购指南本内容来源于什么值得买APP,观点仅代表作者本人作者飞帆飞帆序一套好的家庭影院系统最关键的两部分就是视频系统与音频系统,现在电视行业也内卷也越来越严重,像TCL雷鸟75寸今年双十一双11哪些电视热销?都愿意换台大的,75英寸65英寸电视大流行最近朋友看到双11,打算买一台电视,但还是有些狐疑,主要是不知道该买什么样的电视。我觉得,其实不用看排行榜,电视太多,还是要看自己的需求,主要就是两点,一个是尺寸,一个是预算,同一双11收货OPPO不足千元手表值得买吗?这些体验必须要分享给你虽说现在双11还在进行中,但在10月31日付完尾款之后,有很多购买的产品都已经到手了,比如在最近挑选的一款安卓智能手表OPPOWatchSE,当时购买的时候就想着选一个大品牌,不超等你老了请务必放弃大妈卷,换个发型,打扮简约也不掩气质秋日生活打卡季一个人的形象绝非靠年龄所决定,也不光是穿衣搭配问题,而是囊括衣着发型妆容仪态等各个方面,特别是发型。女人年纪大了别以为穿衣赶时髦就行了,一头大妈感十足的卷发也会导致气
郭艾伦16分14板,辽篮开门红!对抗强度大,裁判的吹罚被杨毅吐槽CBA常规赛,上赛季的冠军vs亚军,辽宁男篮vs浙江东阳光!本以为是一场从开始就强强对抗的比赛,结果没想到浙江东阳光第一节被辽宁队打懵了,准确来说是被弗格打爆了。这一节东阳光队只得CCTV5直播!李春江抢首胜,王哲林VS新疆高塔,齐麟挑战丁彦雨航10月11日是CBA常规赛第一轮第二个比赛日,官方安排了5场比赛,除了广东对北控可能会被取消外,其他场次竞争会比较激烈,每支新亮相的球队都想拿到赛季第一场胜利。晚上1935分的上海三大特殊优势,让它成为了顶级旗舰机型的共性不久前,我们三易生活曾分析了谷歌方面刚刚发布的Pixel7系列机型。当时我们指出,由于Pixel7系列的用料硬件配置非常将就,这使得它对于消费者来说显得诚意不足。而落后的处理器架构这条悬空长吊桥,你敢挑战一下吗?这条悬空长吊桥,你敢挑战一下吗?01hr关于卡尼略Tibetan桥今年春天,位于安道尔卡尼略的Tibetan桥在历经18个月的建造后正式揭幕。这座耗资460万欧元的长吊桥,成为了比迪拜或将建巨型月球形建筑,在地登月可能成真?太空旅行不仅仅是亿万富翁们的游戏,对于无法支付高达几十万美元的太空飞船票价的普通人来说,去一次太空中心参观航天发射场,或是去太空博物馆,都是太空旅行的一部分,未来,这张名单上可能再人体的胃像一台混泥土搅拌筒人的一生要吃进多少食物,谁都说不清楚。我现在的饮食是什么?去看我前面发表的巜旅游是当代最被追捧和千方百计去实现的个人追求。在那里,我阐述了我现在的生活和饮食。过去吃过的山珍海味只是说说咱大兰州喜迎二十大兰州处在中国的大西北,是中国版图的地理中心。兰州占地一万三千平方公里,常住人口有四百多万,是中国西部的重要中心城市。母亲黄河兰州是中国唯一的黄河带着远古文明穿城而过的城市,它是甘肃梁山县开展喜迎二十大普法基层行送法进景区活动近日,梁山县司法局联合县市场监督管理局深入县大路口乡贾堌堆景区开展喜迎二十大普法基层行送法进景区活动。活动中,县市场监督管理局工作人员向来往游客宣讲了疫情防控的相关规定,引导游客要外商独资旅行社出境游试点扩大,是狼来了?出境游的春天来了?政策文件关于10。8日发布的104号函一出,旅游行业又来了一波认为这是开放出境游的信号,还有部分人认为外资旅行社可经营出境业务是惠民,出境游团费更便宜了。我觉得完全想多了。只是加入北海道SOS未解悬案,其中疑点重重,遗物中为何传出诡异语音探索世界未知之谜,寻找离奇诡异事件。大家好,我是诡奇先生。今天我要聊的是我在寻找素材时发现的一则比较诡异的雪山SOS事件,其实这个事件早在几年前就已经报道过了,今天特意找出这一事件秋天,爬山去!马鞍山这10座绝美山峰,少走一处都是遗憾花落花开,又到了最适合登山的时节!每每到了秋天,最让小编开心的,莫过于挑选一个阳光灿烂的日子,叫上亲朋好友一起,徒步爬山登高远望。登山,不仅可以贻神健身,还能呼吸到绝佳的清新空气,