linpf
V2EX  ›  数据库

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

  •  
  •   linpf · Jun 19, 2017 · 2524 views
    This topic created in 3264 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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