首页 > 如何查看某一条记录插入到主库的时间与插入到插入到从库的时间差

如何查看某一条记录插入到主库的时间与插入到插入到从库的时间差

业务

用户抽奖
先查询该日已抽奖次数--drawCount 如
select count(*) from draw_log where user_id = 1 and draw_date = current_date
如果drawCount<3 表示抽奖次数未满 继续抽奖
如果drawCount>=3 表示抽奖次数已满 直接返回 提示该日抽奖次数已满

问题

但发现实际有些用户超抽了 最多的一天甚至抽了65次

原因

  1. 并发抽奖
    但查看数据库记录 可以排除是并发的情况 每次抽奖之间的间隔至少为6秒

+-----------------+
| diff            |
+-----------------+
| 00:00:07.000000 |
| 00:00:08.000000 |
| 00:00:12.000000 |
| 00:00:12.000000 |
| 00:00:07.000000 |
| 00:00:06.000000 |
| 00:00:07.000000 |
| 00:00:07.000000 |
| 00:00:08.000000 |
| 00:00:09.000000 |
+-----------------+
  1. 主从延时
    因为是从从库查询的该日已抽奖次数,怀疑是从库延时导致, 但咨询了dba,他说不可能, 因为mysql主从都是使用的ssd, 且之前插入了几百万条数据也几乎实时同步到从库了。且抽了最多次数的那个用户第一次和最后一次时间间隔也太大了 有8分钟

timediff(max(draw_time),min(draw_time))
00:08:28

但我感觉也只有这一原因能解释了, 想咨询一下有没办法验证这一假设呢?
即可有办法看到某条记录主从之间的延时,插入到主库的时间与插入到从库的时间差。


就算主从同步没问题,感觉你的业务实现也是有问题。
你的业务应该查询和更新都需要控制在主库执行。
但是并发的话你这样还是有问题,例如:用户同时抽了两次,两次可以在主库同时查到是3,就同时插了两条记录,这时候就变成了四条,相当于一天抽了四次。

你可以测试一下试试。

【热门文章】
【热门文章】