V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
linpf
V2EX  ›  数据库

菜鸟问一个数据库性能的问题

  •  
  •   linpf · 2017-06-19 17:34:38 +08:00 · 1934 次点击
    这是一个创建于 2716 天前的主题,其中的信息可能已经有所发展或是发生改变。

    可能在大神眼里有些幼稚……但是原谅我的菜,斗胆问个问题:

    我买的阿里云 mysql 数据库,CPU 使用率一直都保持在 2%以内。请求量加大的情况下,发现 mysql 的查询速度大量降低,但是数据库 CPU 使用率也不提高,感觉数据库 CPU 被大量浪费。能否提升 CPU 使用率到 50%左右,使得 mysql 查询速度降低?

    内存使用率一直稳定在 25~30%,慢查询的时候发现内存利用率会上升。为啥 CPU 就不会提升利用率来加快查询呢? 难道是因为 mysql 操作一般用不到 CPU 来计算?

    21 条回复    2017-07-05 12:16:02 +08:00
    Yinz
        1
    Yinz  
       2017-06-19 17:44:43 +08:00   ❤️ 1
    大量简单查询一般是磁盘 IO 吧?
    MasterC
        2
    MasterC  
       2017-06-19 17:47:31 +08:00   ❤️ 1
    IO 开销,数据库最大连接数等等 都有可能影响查询性能,瓶颈不一定在 cpu 上
    silentime
        3
    silentime  
       2017-06-19 20:15:40 +08:00
    你的目的是为了提升查询性能,跟是否消耗数据库资源是两回事啊,提升查询性能,最直接的先看看有没有索引
    changwei
        4
    changwei  
       2017-06-19 20:22:07 +08:00 via Android
    提升 cpu 使用率降低查询速度可以试试看 while 1=1
    misaka19000
        5
    misaka19000  
       2017-06-19 21:33:12 +08:00 via Android
    CPU 再快也没法提升 IO 的速度,数据库使用 B 树已经比较好的解决了 IO 查询比较慢的问题(空间换时间),想要速度快可以上 NoSQL 或者 SSD
    we3613040
        6
    we3613040  
       2017-06-19 21:44:44 +08:00
    CPU 问题、内存问题、磁盘 IO 问题、网络问题这些都有可能是效率低,你先搞清楚是因为什么效率低,才能对症下药,不用只从 cpu 考虑。
    realpg
        7
    realpg  
       2017-06-19 21:56:41 +08:00
    先优化好你的查询再说吧……
    跟你的 CPU 不发生关系
    Jacklee
        8
    Jacklee  
       2017-06-19 22:20:52 +08:00
    数据库的查询是 IO 密集型操作,所以查询瓶颈就在 IO 上了,所以 CPU 并不能帮上忙。redis、memcache 这类数据库,之所以查询快,也就是因为它们把数据放到内存里而不是硬盘上。所以,从查询优化上处理吧
    Immortal
        9
    Immortal  
       2017-06-19 22:43:53 +08:00
    总感觉是连接数没上去
    akira
        10
    akira  
       2017-06-19 22:54:09 +08:00
    普通查询是不怎么消耗 cpu 计算的。 根据你的需求,购买低一级的 rds 配置应该就够了
    linpf
        11
    linpf  
    OP
       2017-06-19 22:57:27 +08:00
    @Yinz
    @MasterC
    @silentime
    @changwei
    @misaka19000
    @we3613040
    @realpg
    @Jacklee
    @Immortal
    @akira

    所以就是阿里云给的配置是 CPU 性能过剩?
    misaka19000
        12
    misaka19000  
       2017-06-19 23:35:48 +08:00
    @linpf #11 只能说你的程序是 IO 密集型程序
    Mirana
        13
    Mirana  
       2017-06-20 00:03:35 +08:00
    找个同样配置的物理机器,同样的压力测试试试

    估计是阿里云偷用户的 CPU
    DaPanda
        14
    DaPanda  
       2017-06-20 06:43:15 +08:00
    内存会加大是因为有些操作会更多利用 buffer,从而减少开销最大的硬盘 IO。
    而 CPU 是不怎么会用到的
    Immortal
        15
    Immortal  
       2017-06-20 09:05:54 +08:00
    @linpf 不是 是代码和设置上的问题 查看下 mysql 的连接数配置信息 如果代码上的库有连接池 看下连接池的上下限配置信息
    Jakesoft
        16
    Jakesoft  
       2017-06-20 09:38:20 +08:00
    这说明你的 mysql 不忙
    zjq426
        17
    zjq426  
       2017-06-20 09:40:52 +08:00
    直觉是 mysql 并不能让一条 query 在多核上并行,所以提高 cpu 使用率不是一个可行的方法。楼主可能需要先了解到如果需要磁盘 io 操作比内存操作是会慢很多的,内存又比 cpu 要慢很多,所以更慢的地方慢了,很快的地方闲着是很正常的。已经有朋友给出思路是增加内存。

    如果楼主想深入分析,建议应该再提供连接池的配置大小,实际使用活跃链接数量,查询数量平均,峰值,然后还有读写比等信息,是否设计事务操作,联合查询等信息供大家分析。
    buliugu
        18
    buliugu  
       2017-06-20 11:37:20 +08:00
    当索引之类的数据库优化都做完以后,sql 最简单的优化就是换一块 ssd 口牙(逃
    linpf
        19
    linpf  
    OP
       2017-06-20 22:14:34 +08:00
    @Jakesoft mysql 压力不小,遇到几个慢查询就数据库直接 CPU 飙升 100%崩溃了。
    akira
        20
    akira  
       2017-06-25 17:36:23 +08:00
    @linpf 慢查询又是另外一回事了,要根据 sql 以及对应的表结构和索引 来具体分析了
    Hozzz
        21
    Hozzz  
       2017-07-05 12:16:02 +08:00
    是 Linux 主机吗?是的话贴个 vmstat 1 10 上来看看(输出这个之前记得把查询跑起来)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1148 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:57 · PVG 02:57 · LAX 10:57 · JFK 13:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.