在开发的过程中,和数据库打交道是常有的事情,基本上伴随着我们每一天。最近遇到了一个特别诡异的事情,当通过排查各种原因找到问题的根源之后,其实也就是一个很简单的问题。可一些问题,往往是最初会让人抓狂,不知所措。遇到了问题,还是需要冷静下来,对各种情况进行分析,并最终找出问题的解决方案。我特别喜欢一句话:总搞得定!
下面在这里简单和大家分享一下我遇到的这个问题,问题现象如下:一个定时任务,会更新本地的两个表(盘点设备表和外部关联表,关联表存储盘点工单的状态),同时还会同步设备的信息到一个外部系统,主要有三个动作。线上却发现:一批盘点工单处理完之后,定时任务执行完,预期所有盘点工单的状态以及盘点设备表的数据都会成功更新,可实际上大部分数据失败了。预期的结果应该是:盘点设备表设备状态更新为成功,外部关联表状态成功(这个没有问题)。
分析问题的过程:排查定时任务当中的每一个业务逻辑,每一个接口操作和逻辑处理分支增加日志,可最终也没能发现问题。好,继续,通过变更记录看,盘点设备表有变更的记录(是我们预期的),可实际上数据库并没有成功更新。这是为什么呢?有成功更新的变更记录,数据库却没有更新!!!诡异!!!!
。。。。。。
这个问题的排查,中途也放置了一段时间,没有去理会,实在找不出什么原因了。后来一些同事一起再次梳理,准备再一次进行突破。这一次,对每一个操作盘点设备表的地方添加变更记录,找出同一个时间点,到底哪些地方会修改盘点设备表。果然,这一次修改后发布到线上,定位到了问题的原因。定时任务本身修改数据没有问题,但是定时任务操作的时候随后被其他地方覆盖,所以影响了我们本身的业务。现在问题解决了,回头看看,这个问题不算什么难题,可花了不少的时间。
通过多次努力,找到了问题的原因,一个事务操作的数据被另一个事务覆盖掉了,可为什么为导致这个问题呢?项目中我们使用了MyBatis自动生成的更新语句,在程序当中,每一个事务中的更新操作又是针对原始一条完整的记录进行操作,这样导致的问题就是:不管数据有没有变更,最后所有字段都会更新一遍到数据库。所以解决办法就是:每一次更新,拿到对象的唯一主键标识创建一个新的对象,把要变更的字段进行重新赋值,然后更新到数据库,这样就不会影响到原有没有变动的字段信息。
总结:
1、遇到问题,需要有一个冷静的头脑,也要找对方法,一步一步去分析问题;
2、对于问题,一个人的想法是局限的,需要和大家多沟通沟通,发散思维;
3、排查问题的一些方式:打日志、记录变更记录、异常邮件通知;
4、面对问题,告诉自己,总搞得定!
相关推荐
Faker是一个给你生成假象数据的PHP库,无论您是需要引导你的数据库,创建好看的XML文档,填写在你的持久性压力测试,或匿名从生产服务获取的数据,Faker都可以实现。
这个库的名字"Faker"来源于其核心功能——伪造(fake)数据,帮助开发者快速填充测试数据或者创建演示示例。 ### Faker的用途 1. **数据库初始化**:在进行新项目开发时,我们常常需要向数据库填充一些预设数据,...
这个故事虽然名为“小学数学数学故事夜晚的假象”,但其主要内容并不是数学问题,而是一个侦探推理的小故事。故事中包含了一些逻辑推理的元素,这些元素在解决数学问题时也经常需要用到,比如分析、判断和逻辑推断。...
同时,数据可视化还需要考虑到人类的视觉假象和视觉通道的限制,如避免使用过多的颜色和图形、避免使用不适当的视觉通道等。 数据可视化的应用非常广泛,如地图投影、点数据可视化、线数据可视化、area数据可视化、...
生成器负责根据低分辨率图像创建高分辨率的假象,而判别器则试图区分真实高分辨率图像和生成器产生的假象。通过对抗训练,生成器逐渐改进其生成高分辨率图像的能力,直到判别器无法准确区分真伪。 在这个Python实现...
这些假象通常是由于近地表的复杂地质结构、不准确的速度模型或者数据质量不佳等原因导致的,它们会干扰成像结果,降低成像精度。 为了消除这些低频假象,本程序提供了一种解决方案,即利用空间域的Laplace滤波方法...
UpdatePanel创建了一个假象的异步环境,尽管服务器端的处理仍然同步进行,但客户端的体验是异步的,即只有UpdatePanel内的内容会被更新,而不是整个页面。这样,我们可以避免页面回发,提高页面响应速度。 在“用...
滤波参数的选取需要考虑数据处理过程中的波形失真和假象产生等问题。例如,矩形滤波器会引起“吉普赛”效应,这可以通过使用带通滤波器并适当调节滤波参数的斜率和频带宽度来缓解。对于受声波干扰严重的数据,可以...
视觉假象是由于大脑对视觉信息处理方式导致的误解,如尺寸错觉、细胞错觉等,它们在设计可视化图形时需特别注意,避免误导观众。 数据可视化编码由标记和视觉通道构成,标记用几何图形代表数据属性,视觉通道则将...
与之相对的是虚荣指标,它们可能给人一种成长的假象,但缺乏实质性的业务影响。例如,销售额、店铺总数、活跃用户数等可能是虚荣指标,而用户转化率、留存率等更能反映业务健康状况。 维度和度量是数据分析中的基本...
研究中指出,通过获取优化后的朴素贝叶斯公式,结合假象空间重构数据向量间的关系,采用改进后的欧几里得度量策略,可以更准确地计算出数据偏差比,从而对分区域的异常数据进行有效分类。具体来说,作者提出了一种...
在单核处理器上,通过时间片轮转的方式实现线程间的切换,给人一种同时运行的假象;而在多核处理器上,不同线程可以真正地并行执行,显著提高计算效率。在这个工具中,开发者通过创建小于处理器核心数的线程,充分...
预处理是为了提高数据的质量,确保挖掘出的规则能够真实反映数据间的关联关系,而非由于数据质量问题导致的假象。在这个基础上,数据挖掘程序对数据进行关联规则的挖掘。这里的关联规则是指发现数据项之间的有趣关联...
8. **循环队列操作演示**:循环队列是解决队列溢出问题的一种方法,通过“假象”地将队列末尾连接到开头。`循环队列操作演示.rar`可能解释了如何进行入队、出队以及判断队列满和空的操作。 9. **寻找中序线索化...
再者,操作系统(os)的卡顿或延迟可能导致数据传输和记录出现问题,进而形成直线段的假象。解决这个问题的方法包括定期检查硬件温度,确保设备在适宜的工作环境中运行,以及优化软件以减少os的卡顿。 2. **加速度...
"小波变换理论及其在地震数据处理中的应用" 小波变换理论是信号处理领域中的一个重要理论,它可以将信号分解成不同的频率分量,从而实现信号的时间-频率分析。在地震数据处理中,小波变换理论可以应用于地震信号的...
K线包含了大量信息,但直接解读并不简单,因为它可能被庄家利用来制造市场假象。因此,真正理解市场动向,需要从逐笔成交数据出发,通过分析盘口成交细节,洞悉庄家的操盘手法。 观点B则指出股票价格由主动性买卖盘...
而地形改正主要是对由于地形起伏造成的磁异常进行校正,因为地形的起伏会造成局部磁异常的假象。通过这些改正,可以得到相对纯净的磁异常数据,为后续的数据处理打下坚实的基础。 然后,文章中提到了使用正则化滤波...
循环队列是一种优化的顺序队列,通过设置一个假象的队列边界来避免数组满或空的情况,从而提高了空间利用率和操作效率。在"循环队列+线程实现按顺序执行任务"的场景中,循环队列可以作为任务队列,多个线程并行地从...