可能在大神眼里有些幼稚……但是原谅我的菜,斗胆问个问题:
我买的阿里云 mysql 数据库,CPU 使用率一直都保持在 2%以内。请求量加大的情况下,发现 mysql 的查询速度大量降低,但是数据库 CPU 使用率也不提高,感觉数据库 CPU 被大量浪费。能否提升 CPU 使用率到 50%左右,使得 mysql 查询速度降低?
内存使用率一直稳定在 25~30%,慢查询的时候发现内存利用率会上升。为啥 CPU 就不会提升利用率来加快查询呢? 难道是因为 mysql 操作一般用不到 CPU 来计算?
1
Yinz 2017-06-19 17:44:43 +08:00 1
大量简单查询一般是磁盘 IO 吧?
|
2
MasterC 2017-06-19 17:47:31 +08:00 1
IO 开销,数据库最大连接数等等 都有可能影响查询性能,瓶颈不一定在 cpu 上
|
3
silentime 2017-06-19 20:15:40 +08:00
你的目的是为了提升查询性能,跟是否消耗数据库资源是两回事啊,提升查询性能,最直接的先看看有没有索引
|
4
changwei 2017-06-19 20:22:07 +08:00 via Android
提升 cpu 使用率降低查询速度可以试试看 while 1=1
|
5
misaka19000 2017-06-19 21:33:12 +08:00 via Android
CPU 再快也没法提升 IO 的速度,数据库使用 B 树已经比较好的解决了 IO 查询比较慢的问题(空间换时间),想要速度快可以上 NoSQL 或者 SSD
|
6
we3613040 2017-06-19 21:44:44 +08:00
CPU 问题、内存问题、磁盘 IO 问题、网络问题这些都有可能是效率低,你先搞清楚是因为什么效率低,才能对症下药,不用只从 cpu 考虑。
|
7
realpg 2017-06-19 21:56:41 +08:00
先优化好你的查询再说吧……
跟你的 CPU 不发生关系 |
8
Jacklee 2017-06-19 22:20:52 +08:00
数据库的查询是 IO 密集型操作,所以查询瓶颈就在 IO 上了,所以 CPU 并不能帮上忙。redis、memcache 这类数据库,之所以查询快,也就是因为它们把数据放到内存里而不是硬盘上。所以,从查询优化上处理吧
|
9
Immortal 2017-06-19 22:43:53 +08:00
总感觉是连接数没上去
|
10
akira 2017-06-19 22:54:09 +08:00
普通查询是不怎么消耗 cpu 计算的。 根据你的需求,购买低一级的 rds 配置应该就够了
|
11
linpf OP |
12
misaka19000 2017-06-19 23:35:48 +08:00
@linpf #11 只能说你的程序是 IO 密集型程序
|
13
Mirana 2017-06-20 00:03:35 +08:00
找个同样配置的物理机器,同样的压力测试试试
估计是阿里云偷用户的 CPU |
14
DaPanda 2017-06-20 06:43:15 +08:00
内存会加大是因为有些操作会更多利用 buffer,从而减少开销最大的硬盘 IO。
而 CPU 是不怎么会用到的 |
15
Immortal 2017-06-20 09:05:54 +08:00
@linpf 不是 是代码和设置上的问题 查看下 mysql 的连接数配置信息 如果代码上的库有连接池 看下连接池的上下限配置信息
|
16
Jakesoft 2017-06-20 09:38:20 +08:00
这说明你的 mysql 不忙
|
17
zjq426 2017-06-20 09:40:52 +08:00
直觉是 mysql 并不能让一条 query 在多核上并行,所以提高 cpu 使用率不是一个可行的方法。楼主可能需要先了解到如果需要磁盘 io 操作比内存操作是会慢很多的,内存又比 cpu 要慢很多,所以更慢的地方慢了,很快的地方闲着是很正常的。已经有朋友给出思路是增加内存。
如果楼主想深入分析,建议应该再提供连接池的配置大小,实际使用活跃链接数量,查询数量平均,峰值,然后还有读写比等信息,是否设计事务操作,联合查询等信息供大家分析。 |
18
buliugu 2017-06-20 11:37:20 +08:00
当索引之类的数据库优化都做完以后,sql 最简单的优化就是换一块 ssd 口牙(逃
|
21
Hozzz 2017-07-05 12:16:02 +08:00
是 Linux 主机吗?是的话贴个 vmstat 1 10 上来看看(输出这个之前记得把查询跑起来)
|