生产问题汇总记录(自查)

环境迁移引来的事故

问题背景:

因某些业务原因,需迁移db存储源。

实施过程:

因当前系统日益庞大,待有很多需要优化的地方。遂迁移存储源、代码优化、迭代一起改动,进行上线。

落地结果:

线上出现问题,需要回滚,没有梳理回滚方案。含泪奔跑,下游系统欲哭无泪。

问题感想:

相关较大迁移的操作,切不可操之过急,一步一步的进行。

spring代码版事务connection close

问题背景:

spring事务分为注解版和代码版事务。

因某些场景需要针对回滚情况特殊处理,有因注解版事务对使用人员要求相对较高。遂采用代码版事务。

问题现象:

当前系统最近1个月无相关迭代上线,线上报出connection close问题,对堆栈信息查看后,为一个简单的查询,或存在了很久并未改动过的update/insert操作等。即日志信息无协助排查意义。但该问题爆出并无规律。线上3台机器,均有问题,无固定触发时间点,无固定触发操作。

问题分析:

该问题一定为数据库配置问题,导致数据库连接池出现了坏连接。针对该问题处理采用了

1.检查了数据源配置,乃至和生产其他系统中稳定的数据源配置进行对比,无问题。

2.增加相关数据源配置,每次请求都判断当前连接是否生效的配置testOnBorrow,也无解决(重新部署后,过几天仍然有该问题爆出)。

3.联系dba,反馈为数据源配置问题。dba协助排查也无问题,dba断言肯定为数据源配置问题。整个沟通周期较长(dba在上海职场),dba后来打开了‘消失’模式。

4.继续跟进数据源配置问题,发现当前数据源为tomcat-jdbc,tomcat-jdbc存在丢连接的情况,修改使用为内部自研的数据源(其实某版本之后就默认使用自研的数据源,无关显示配置),问题仍未解决。

5.一刹那,想到会不会是基于连接池操作的sql事务没关的原因。

将当前系统针对事务的地方,进行代码review。发现有某处场景处理,开启事务后,当某条件不满足,直接进行return(return之前有条日志信息,未进行事务回滚)。针对该日志以最近重新部署(问题未解决之前,一直采用重新部署的方式来解决)的时间起,每台机器的每天日志信息均进行查看,发现该日志存在,且该日志出现后不久就报该异常。

解决方案:

将相关的return操作之前增加事务回滚操作,且制定规范相关spring代码版事务操作中,事务开启后不允许在事务内进行return操作,均采用抛异常的形式,抛到catch中统一rollback。

问题感想:

针对线上问题出现时,先稳定心态。不要陷在局限思维中,节省问题排查时间。

线程池导出同步变异步(多线程并行跑数据),结果更慢

问题背景:

因为导出数据过多,接口响应超过1s,不满足公司qop要求,进行改造。遂进行同步变异步,且并行处理。

问题现象:

异步处理时根据要导出的数据量进行拆分,每查询500条数据的相关操作为1个任务放到线程池受理。

导出时因为要关联信息进行组装进行查询,可能会涉及到调上游接口、查缓存、查其他表等,但30w的数据导出甚至有时需要2分钟。

问题分析:

查看日志信息发现每个查询任务大致耗时约0.5s,发现日志中的线程号为同一线程处理,并没有实现并行的效果。

查看线程池,发现配置有极大问题。corePoolSize为1,queueCapacity为60000。了解线程池配置的同学应该明白,只有当queueCapacity满了之后且小于maxPoolSize,才会创建新线程来处理任务。

问题原因:

因为线程池的配置不合理,导致多线程的处理变成了单线程的效果。

解决方案:

修改线程池配置信息

问题感想:

前人挖坑,后人深陷其中。合理利用线程池配置信息。

sql优化总结

问题背景:

随着数据量的剧增, sql执行耗时超过1s,不满足qop的指标要求,遂进行改造。

解决方案汇总(基于sql优化的基础):

整体分为业务优化+技术优化

1.全量模糊匹配,协调产品和用户沟通采用最左匹配原则(业务优化)

2.查看相应索引是否生效,是否为理想中的索引,如果不是,采用强制做索引的方式。(技术优化)

  1. 因sql执行耗时超过1s为硬性要求,又因非主键索引会进行回表操作,遂采用回表操作拆分的形式。1条sql折合成2条。

     第1条只查询id(避免回表);
    
     第2条根据id查询需要的数据信息(手动回表)。
    
  2. 根据业务关系,多表合并成单表,避免关联表查询。

问题感想:

sql优化方式有很多,较好的方式沉淀是根本。

显示delete的事故

问题背景:

因增加了某些条件,需失效用户信息。(该问题为其他事业部的coe,因某次小迭代,未进行codeReview、rd自测上线,导致该事故。)

问题现象:

影响集团内部所有系统不能正常运行

问题原因:该系统采用了物理删除的形式, 因某场景没有match到,导致在执行删除语句的时候没有where条件。

解决方案:

dba进行数据恢复。

问题感想:

相关系统设计时,无论如何不可使用物理删除逻辑,应采用逻辑删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值