关于 MySQL 查询咨询

37 天前
 fenglangjuxu
有这么一个场景 服务部署在 k8s ,服务设置的是两个 pod 。然后代码有个启动加载,会有一堆 id (假如是 a b c d e f )去 MySQL 查询然后加载到内存。

因为两个 pod ,会同时查询等于 a 的,很可能后续同时查询等于 b 的。为了避免一个同时查询,我加了 shuffle 机制。

对于这个机制,我也是脑袋一热加的,当说出来大家讨论的时候,问会快么?我也懵逼了。

于是我写代码测试了下,逻辑是一批 id ,启动两个线程去查询,然后看耗时,结果 shuffle 的真的快一些。


对于这个结果,有人从原理上帮解析下么?或者我这个结论是错的?
969 次点击
所在节点    MySQL
2 条回复
lucasdev
37 天前
"shuffle 的真的快一些" 这是多少次实验的结果,排除了 MySQL 查询外的其他原因吗?建议多试几次

我瞎猜两个:
1. 查询缓存:两个并发请求没有命中缓存,错开后可以命中缓存。
2. 数据分片:a 和 b 请求落在了不同的 MySQL 节点上,避免同时竞争一台机器的资源。

当然,如果你们的 MySQL 没开查询缓存或者水平分片,这两条就不存在
fenglangjuxu
37 天前
@lucasdev 大概 7-8 次吧 期间测试 也是调整了顺序。
比如第一回合 先请求不 shuffle 的 然后再请求 shuffle 的
第二回合 先请求 shuffle 的 然后再请求不 shuffle 的

第一点 一般的 MySQL 应该都开启了这个
第二点 用的是华为的 rds 不太清楚这点

这个测试 我是再测试环境测的 然后到了线上环境我是用了 shuffle 的 发现总耗时比昨天的不用 快了好几秒

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1080432

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX