其它组里的同学今天遇到一个难题,使用typeorm过程中insert时而生效,时而无效。他怀疑是这个orm没有提交事务,但是对这个问题不知道该怎么进行验证。

  本身对这个框架,并没有过了解。并且由于业务的复杂性,这个问题出现的原因可能性很多。比如数据其实插入了,但是由于某个原因回滚了;也可能如他所说,事务没有提交;也有可能这里是插入成功了,但是由于系统bug又被其它的接口删除了。总之要从代码去排查,一时半会儿还没有什么思路。

  但有一点,他的系统使用的是MySQL数据库,虽然不能准确定位bug点,但是可以将它的问题缩小一定范围,引导他找到一个正确的解决方向。我们可以设置MySQL的执行日志,然后在调试时,查看这个时刻的语句执行情况,这样就能在MySQL服务端,准确把握到底是没有插入语句,还是插入了之后又被删除了。

  1.现在Linux环境下,设置日志:

mysql> set global log_output='TABLE';set global general_log='ON';

Query OK,
0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec)

  2.开启MySQL客户端*(如Navicat,也可以在Linux开启的客户端中查看,但不方便):

SELECT event_time,CONVERT(argument USING utf8) FROM `general_log` ORDER BY event_time DESC;

#这里的argument是blob类型的数据,需要进行转换才能方便查看

  3.此时可以让该同学调试他的接口,在调试过程中,执行一次接口的逻辑,一边在Navicat中执行上述语句,就能够把握执行SQL语句的情况:

  此时,可以根据语句的执行情况,判断代码中的问题到底是出在哪里。虽然不能完全定位,但是缩小了范围之后,排查起来应该会省力很多。

posted on 2021-07-07 22:58  长江同学  阅读(240)  评论(0编辑  收藏  举报