V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
fenglangjuxu
V2EX  ›  MySQL

关于 MySQL 查询咨询

  •  
  •   fenglangjuxu · 76 天前 · 1166 次点击
    这是一个创建于 76 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有这么一个场景 服务部署在 k8s ,服务设置的是两个 pod 。然后代码有个启动加载,会有一堆 id (假如是 a b c d e f )去 MySQL 查询然后加载到内存。

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

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

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


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

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

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

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

    这个测试 我是再测试环境测的 然后到了线上环境我是用了 shuffle 的 发现总耗时比昨天的不用 快了好几秒
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1349 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:21 · PVG 01:21 · LAX 09:21 · JFK 12:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.