开发者社区> 问答> 正文

想请教下各位大佬,关于线上报错lock wait timeout exceede?400报错

我的程序代码是这样的,在一个事务里有3个insert操作,1个update操作,3个select操作,还有一个邮件发送功能也在这个事务中。

mysql锁超时时间应该没人改,我想会不会是邮件发送影响了事务,假如网络问题或者地址账号错误,邮件是否会延迟发送或者重试发送,而在这个过程中邮件未发送完成,事务不会提交,一直持有锁导致锁超时,求教各位大佬,有没有可能是这个原因呢?

 

展开
收起
爱吃鱼的程序员 2020-06-06 15:07:54 442 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
                        DB事务尽可能和大量IO的功能区分出来! 
                    
    
                            好的,以后一定注意,谢谢
                        
    
                        <p>完全有可能,邮件发送方和接收方连接超时、socket、会话超时都会影响到</p>
    
                    
    
                            我改下实现方式试试看,谢谢
                        
    
                        <p>邮件发送本就不应该同步等待是否发送成功、是否到达目标地址,既然是异步,所以在事务中发送邮件没多大意义吧。</p>
    
                    
    
                            这是个类似流程审批的功能,每个节点处理后发送对应内容格式的邮件,所以做成同步的,只是实现方式错误,不应该把邮件发送加到事务中
                        
    
                        <p>可以建个表吧要发的邮件内容存起来,然后一个进程去专门发邮件</p>
    
                    
    
                            这样也可以的,谢谢
    
    2020-06-06 15:08:07
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
How Simplicity Will Unlock the True Potential of 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载