目录
背景
上线时,发现第三方组件数据库返回的数据存在错误,导致平台数据库误更新。
接下来一顿操作猛如虎,根据调用接口的返回值 直接撸代码查找线索。查找完之后,返现数据库更新的时间线索完全能够对的上,没有问题呀。第三方组件数据库更新是正常的,为什么调用时会返回数据不正确!懵逼了。
小白选手,数据库仅仅停留在最基本的CRUD,数据库架构设计及性能方面很茫然!
排查思路
1. 数据库有没有cache 缓存。 代码确认没有 缓存。
2. 数据库在时间段产生主备切换。
咨询专门做数据库开发的同事。
分两次插入数据,第一次插入五条,数据库返回成功后,调用接口查出来是5条。过了一会插入2条数据,数据库成功后,调用接口查询还是5条,重试就变成了7条。数据库的结果是7条数据,create的时间点和api也是吻合的。
第一种情况:主从有延迟的情况下,默认查询的是从库的,导致查询的数据不一致。
第二种情况:主从没有延迟的情况下,insert的事务,没有提交commit,然后发起了查询。
insert的操作是 操作的主库,select查询的操作 没有指定hint的话,默认查询的是从库。
通过监控查到时间点是吻合的,数据库主从延迟,导致select查询从库的时候,没有读到正确的数据。
通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力 这样的方案来进行部署与实施的。
参考博文:https://www.cnblogs.com/cnmenglang/p/6393769.html