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

记录1次MybatisWrapper导致的生产事故

  1.灾难回顾
  1)某日早上,生产环境告警群出现了慢接口告警,随之而来的是CPU告警。
  2)因为最近没有上新功能,所以初步猜测是否中间件或数据库出了问题?经排查,各中间件一切正常,数据库慢sql也不算很慢。
  3)在主机上使用top命令查看CPU占用情况,发现有异常:主机CPU一直保持在1000%(主机16核),一直持续。
  4)有了上次的经验,第一时间看GC情况:jstat -gcutil pid 1000。果然,发现FGC每几秒就增加1次,说明JVM在疯狂进行Full GC,至于为什么会频繁Full GC,一脸茫然。
  第一反应是重启部分机器,留1台机器进行dump内存快照。
  5)10分钟后,经分析快照,发现有个类ShopAddress占内存特别大,包含对象数150多万。
  6)使用jstack命令(jstack -l pid)查看JVM线程,搜索关键词ShopAddress,发现的确是有关于ShopAddress的堆栈信息。
  7)基于堆栈信息找到对应的代码,修改代码并发布到生产环境,CPU终于降下来了...
  2.场景简化回顾
  假如说有这么一张表CREATE TABLE `t_shop_address` (  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT "id",  `shop_id` int(11) NOT NULL COMMENT "t_shop.id",  ... ) COMMENT="门店地址";
  需求是:需要根据多个shop_id同时查询数据,于是某老6写了以下的代码public List selectByShopIdList(List shopIdList) {     Wrapper wrapper = new EntityWrapper<>();     wrapper.in("shop_id", shopIdList);     List shopAddressList = shopAddressMapper.selectList(wrapper);     return shopAddressList; }
  就1个查询而已啊,有啥问题吗?
  有啥问题吗?
  Wrapper是mybatis ORM框架用来组装sql类。翻译过来的sql应该是:select * from t_shop_address where shop_id in(?,?,?,...);
  即使t_shop_address表中存储了大量数据,只要shopIdList的数据量比较少,该查询都不会有问题。
  但是今天突然有shopIdList = [] 传进来了,于是CPU便起飞了...
  在mybatis的Wrapper API中,如果value为null或者空列表的情况下,组装的sql会忽略该条件
  从而导致上面的查询sql为:select * from t_shop_address;
  结果是全表查询,150多万的数据量,这就是JVM会疯狂进行Full GC的原因。3.预防措施
  1)使用Wrapper查询之前增加每一个参数的非空校验,确保都是有值的。
  2)避免使用Wrapper来组装条件查询数据库,尽量自己写sql,即时是shop_id in(),最多也只是该业务报错,而不会导致整个系统垮掉。
  但还是建议不要出现shop_id in()的情况,这个会报sql语法错误。可以增加1<>1条件让sql正确执行并返回0条数据。
  3)使用mybatis拦截器来统一限制查询条数,为每个查询增加limit限制,比如1次查询最多返回1000条结果,当触发limit限制的情况下可以告警。如果超过1000条,需要进行分页查询。
  怎么样?还不赶快去看看你的项目,看看有没有老6给你留坑!!!

坚持和孩子练眼睛,成功将裸眼视力从0。5提到1。0在查出孩子视力下降后,真的不敢选择摆烂,也没有配镜,而且开始了全面的护眼行动,我们是全家都参与其中,很多时候对于孩子来说只要家长做好榜样如不看电子产品,不熬夜,那么孩子也会效仿,护小米13Ultra荣耀Magic5魅族20,新机将发布,你更期待哪款?阳春三月,除了踏青出行,感受大自然的朝气蓬勃。手机市场同样朝气十足,各大厂商都来感受感受春天的气息。据不完全统计,不少手机将在2月底,3至4月进行发布。其中,有几款手机备受瞩目,令增程式电动车到底能不能买?车企15年工龄的老工程师告诉你真相众所周知,现在购买新能源车的消费者越来越多,目前市场上新能源车主要分纯电和混动和增程式电动车纯电动车因为续航里程的焦虑所以很多人把目光转向混动或增程式电动车,对于混动技术已经不是什三条劲爆消息,事关国足周琦和山东泰山首先来看国足有博主曝料,国足新任主帅搁浅,具体详情不知。在2。14日,国足选帅专家组成员徐根宝沈祥福魏克兴李春满陈洋郑智等面试了国足主帅唯一候选人扬戈维奇,在专家组一致通过之后,足国企改革价值重塑进行时,每经品牌100指数突现分化每经记者刘明涛每经编辑肖芮冬个股涨跌互现,指数却超预期回调,本周每经品牌100指数遭遇上市后首次个股大分化。本周,沪指高开低走,沪指突破3300点后,冲高回落,但周K线最终仍收涨,拉勾网创始人许单单离任公司已由大股东前程无忧接管继续运营Tech星球2月24日消息,拉勾网创始人董事长许单单互联网分析师发文称通告朋友们一下,我已经离开拉勾了。创业到今天整整10年,经历了一个时代,其中各种滋味都品尝过。公司已由大股东前刘占英会见和光新能源董事长冯国梁一行2月23日,党工委副书记管委会主任刘占英会见和光新能源董事长冯国梁一行。刘占英对冯国梁一行的到来表示热烈欢迎。刘占英指出,经开区与和光新能源合作基础牢固,有很大合作空间,双方要进一OpenAI如何支持数字化营销OpenAI提供了一个基于AI的开发和研究框架。利用OpenAI的平台,AI科技公司可以快速提升开发技能并获取AI领域的专业知识,这有助于通用人工智能(AGI)技术的发展。Open场均134,再见NBA!和詹姆斯冲冠失败,但你淡出联盟不能怪湖人随着湖人在交易截止日之前完成了一系列的运作补强,如今的湖人不仅阵容焕然一新,实力均衡,他们也再次让球迷们看到了冲击季后赛的希望。甚至湖人如果磨合得好的话,看起来他们的阵容并非完全没冲锋!华为年会口号进攻是最好的防守之下导语华为公司最新的2022年度颁奖年会主题进攻是最好的防守,有质量地活下去就是胜利。daretochallenge,daretothrive,真是让人心潮澎湃,蠢蠢欲动!这句话,一梅根逃出绝命镇制作方Blumhouse宣布进军恐怖游戏领域IT之家2月22日消息,以制作梅根逃出绝命镇等电影闻名的Blumhouse现在也要进军游戏行业了。Blumhouse新成立了一个制作与出版部门,未来将为PC主机和移动设备打造原创的
又遭国际奥委会否决,我国申请多个优势传统项目进奥运却屡遇失败几乎每届奥运会都会出现新增比赛项目,比如里约奥运的高尔夫球东京奥运会的空手道巴黎奥运会的霹雳舞等。为了让一些传统或者优势项目进入奥运会,我国一直在努力,但遗憾的是很多至今未能如愿。无论男女,睡前不要做这三件短命事,否则可能会远离长寿春日生活打卡季追求长寿,一直是磨灭不掉的意志。不管在任何时候,我们都想要追求长寿,即使生活条件非常艰苦,或者生活压力非常大,我们都孜孜不倦的追求长寿。然而长寿并不是我们想象的那么简如何查询身份证名下注册的微信支付账户?您可按以下方法查看身份证名下账户1进入查询名下账户,根据页面提示,输出姓名身份证号。点击下一步,系统人脸验证后,即可查询您身份证名下绑卡注册的账户信息。2选择需要注销的微信账户,点储户要注意了,多家银行已通知,有一类账户将要被清理理财意识是中国人自古以来的传统,早在宋朝就有专门替人存放银两的古代银行,又叫伢记。现在我们把存款叫做储蓄,是人们提高生活质量获得经济保障不可或缺的财富。近几十年来,我国经济得到了迅2022年京东各大类目入驻开店保证金年费扣点资费标准一览表京东入驻开店资费主要有保证金年费扣点三部分组成,旗舰店专卖店专营店保证金一致,不开店可退还年费各大类目都是一样,除极个别类目都是1000元一个月,按年收取,因此下表不做统计扣点也就一个人得了绝症,死前疯狂套现100万信用卡,死后银行怎么处理?最近几年我国信用卡发展非常迅猛,各大银行信用卡的发卡量也一路不断增加。根据央行统计的数据,截止2021年第4季度末,我国信用卡和借贷合一卡在用发卡量达到8亿张,人均持有信用卡和借贷空腹锻炼or吃一点再练?多项研究给出了标准答案早上醒后,你有没有过这样一种纠结是空腹锻炼,还是先吃一点再进行?从2010年至今,至少有三项研究成果支持了前一种观点。多项研究发现在早餐前锻炼,有助于增加脂肪燃烧,更好地控制血糖水长时间看电子产品的人如何护眼?随着互联网的高速发展,几乎所有的办公学习娱乐等,都需要电子产品的参与。之前说过养生的关键在于,知其道(天道人道),智者从之,愚者背之聪明的人追求的是长乐大乐愚蠢的人追求的是短乐无节不应对未成年人产生诱导性口味禁令发布,电子烟行业再迎变革近日,国家烟草总局发布电子烟管理办法(以下简称办法),其中规定,禁止销售除烟草口味外的调味电子烟和可自行添加雾化物的电子烟。同日发布电子烟国家标准(二次征求意见稿)中也明确表示,不银行人民币存款提高新利息2022年04月,各类银行存款全新利息表2022年04月,国内各类银行人民币存款全新利息表存款,是指存款人将现金存入在银行机构开设的定期储蓄账户内,事先约定以固定期限为储蓄时间,以高于活期存款的利息获得回报,期满后可领取五大银行表态!这些人可申请房贷延期还款部分人群受疫情影响不能按时还房贷怎么办?工农中建交五大行回应对受疫情影响的个人住房贷款客户可提供包括延后还款时间延长贷款期限调整账单计划等在内的服务支持中国工商银行对于受疫情影响的