Java 写的一个接口, CPU 满载下只有 12 并发量......,如何改善

2018-10-31 10:08:59 +08:00
 337136897

同事写的一个接口。就是查询评论这一块的,同时查询 6 张表吧。用阿里云服务器 4 核 8G 的,CPU 满载,并发只有 12。对,没错只有 12.然后我发现 mysqld 这个进程使用 cpu85%, 剩下的 15%才给了 JVM。 应该怎么去优化这个接口,12 并发是不给活啊

5554 次点击
所在节点    程序员
54 条回复
337136897
2018-10-31 11:36:58 +08:00
@wysnylc 老哥你说的这个我压根儿没听懂
xmh51
2018-10-31 11:39:51 +08:00
数据量不大的情况下 索引作用不是很大,考虑 sql 有问题,你们看下 sql 的问题在哪吧。
limuyan44
2018-10-31 11:40:07 +08:00
现在真是什么都劝人上缓存,要不要再劝一下上分布式啊,建议 lz 把 sql 放上来,表结构也可以放上来研究研究。
xmh51
2018-10-31 11:42:32 +08:00
mysql 可以监控出慢 sql 和查询的 sql。不会的话,手动排查
排查思路:打出接口过程中执行的所有 sql,注意别漏了。
先看下执行 sql 的条数,没问题的话 再一条一条 sql 拿出来使用 navcat 手动执行。看下问题点在哪。
limuyan44
2018-10-31 11:42:42 +08:00
还有数据量执行计划这些都可以放上来,不然只能瞎猜。
Raymon111111
2018-10-31 11:48:58 +08:00
没有场景怎么优化

先看看 sql 和数据量吧
wysnylc
2018-10-31 12:02:05 +08:00
@337136897 #21 并行,异步编程,详情百度
no1xsyzy
2018-10-31 12:23:46 +08:00
explain <查询语句>
no1xsyzy
2018-10-31 12:29:12 +08:00
@zidian9 这两个其实做了同样的运算,除非你用了 SELECT * 并连了不该连的表。
顺便,注意删除所有 SELECT *,要啥写啥,不要 SELECT 多个列后再丢弃(同时,抛弃没有对此优化的 ORM )。
jimrok
2018-10-31 12:52:10 +08:00
初步的想法是你上 memcached,查询一个评论,然后放入 memcachd 里,如果有新评论,过期这个 cache。或者你就将数据库做一个 slave,阿里云有读写分离的地址,你查询走读写分离地址,这样查询请求会被打到 slave 服务器。slave 服务器按照流量收费。另外要把 slave 的配置提高一些,防止复制延迟。
misaka19000
2018-10-31 12:56:06 +08:00
为什么都在推荐上缓存?第一步不应该是优化 SQL 找到 MySQLCPU 占用率高的原因吗
bobuick
2018-10-31 13:13:45 +08:00
sql 肯定是需要优化了。
优化到没办法了,就用拆分大法了。一些聚合,排序,联表过滤到逻辑可以放到程序里来做
Hancock
2018-10-31 13:18:42 +08:00
优化索引,数据库读写分离
qiyuey
2018-10-31 13:19:00 +08:00
@sun1991 我的理解是,第一次的查询,和第二次的 in,都可以走缓存不走 DB,极大的减轻了 DB 的压力
opengps
2018-10-31 13:19:07 +08:00
别只看 cpu,数据库这种应用,你硬盘是 ssd 吗?大部分是因为硬盘的读写,让系统去等待了。
还有个地方要注意,cpu100%并不意味着能正常干活,而是总资源已经不够分的了
kran
2018-10-31 13:23:13 +08:00
显然首先是优化表结构
ragnaroks
2018-10-31 13:33:23 +08:00
@opengps +1
帮助多家微小企业优化过 DB,基本都是磁盘 IO 不足(阿里云 30M)
337136897
2018-10-31 14:36:45 +08:00
cgpiao
2018-10-31 14:38:55 +08:00
这么一说我很担心 我写的 php 接口,laravel 写的,连接了 7,8 个表,还有子查询什么的。
Le4fun
2018-10-31 15:03:24 +08:00
你这 sql 一大坨 瞬间不想看了

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

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

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

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

© 2021 V2EX