mysql - 如何查看某一条记录插入到主库的时间与插入到插入到从库的时间差
PHP中文网
PHP中文网 2017-04-17 13:55:31
[MySQL讨论组]

业务

用户抽奖
先查询该日已抽奖次数--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

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

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(1)
PHP中文网

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

你可以测试一下试试。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号