一次分页的bug

2024-07-29  本文已影响0人  鸿雁长飞光不度

在处理一个手工发放批次任务的线上反馈时,我们发现浏览器在创建任务后会卡死,尤其是在涉及超过1000人时。然而,后端的创建接口会迅速返回一个任务ID,显示创建任务本身并没有性能问题。因此,我们决定先让前端同事进行排查。

经过前端同事的测试,发现问题出现在任务创建完成后,前端会查询批次任务,其中包括发放成员列表。这个列表本应支持分页功能,但在批次状态为“初始化”时,接口返回速度异常缓慢,数据会持续返回。这条信息本该引起注意,但我却忽略了,没考虑到查询过程中批次状态的重要性(需要反思在沟通中忽视了这个问题)。

批次任务创建后会立即异步执行充值操作,状态很快从“初始化”变为“已完成”。过去由于数据库配置较高,任务执行迅速,所以前端查询时批次大多处于“已完成”状态。然而,现在由于配置降低,执行速度变慢,查询时批次常处于“初始化”状态。更糟糕的是,列表接口在未初始化时没有分页功能,导致返回数据过多,从而使浏览器卡死。

在自己测试时,定位问题困难的原因如下:

  1. 查询日志缺失:在查询初始化状态时,没有记录日志。由于数据量过大,日志被忽略且未打印出来。
  2. 数据传输瓶颈:虽然在链路中SQL执行时间很短,但中间存在大段空白时间。这段时间应该是数据传输造成的延迟,但因为缺少日志,我误以为是网络连接的问题,而未意识到是数据量过大导致。
  3. 未重视批次状态:自己测试时没有考虑到请求执行时的批次状态,未意识到问题的严重性。

教训总结:

  1. 重视关键信息:在沟通时要特别注意关键性信息,不能主观臆断,尤其是对于他人认真反馈的重要信息。
  2. 完善日志记录:对于关键接口,需增加日志记录,确保日志信息完整且不会被忽略。
  3. 实现接口分页:列表接口必须添加分页功能,以防止因数据量过大导致性能问题。
上一篇下一篇

猜你喜欢

热点阅读