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

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

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

5593 次点击
所在节点    程序员
54 条回复
JavaFirstMaster
2018-10-31 10:12:20 +08:00
mysql 占用那么高,那就是 mysql 语句需要优化了呀.需要同时查 6 张表是否考虑一下数据结构或者业务逻辑是否合理
337136897
2018-10-31 10:13:31 +08:00
@JavaFirstMaster 大佬 数据结构从哪方面去分析?给个联系方式请教下行否
leriou
2018-10-31 10:15:12 +08:00
如果是真的查询量特别多, 就把数据预处理到 nosql , 从 nosql 查
krisbai
2018-10-31 10:17:11 +08:00
把慢查询日志打开看看
zidian9
2018-10-31 10:17:34 +08:00
查询尽可能不要连表查,可以先查一张表,再通过键 in 的方法查别的表,在程序里写逻辑组装数据。
另外做好 db 索引。
glacer
2018-10-31 10:18:13 +08:00
1. SQL 语句优化
2. 加缓存
jbiao520
2018-10-31 10:18:46 +08:00
mysql cpu 高的话那估计是慢查询了,找找 sql 问题,是不是没建索引啊
337136897
2018-10-31 10:19:36 +08:00
@jbiao520 数据不多,同事已经建了索引了
337136897
2018-10-31 10:22:00 +08:00
@leriou 就是 mongo 或者 redis?
lhx2008
2018-10-31 10:28:18 +08:00
第一次查询把数据加到 redis 里面缓存,有新评论进来再把缓存删掉,这样几百个查询并发都没问题
sun1991
2018-10-31 10:41:44 +08:00
@zidian9 查询尽可能不要连表查,可以先查一张表,再通过键 in 的方法查别的表
--- 经常看到这种讲法, 自己做表连接的效率比 MYSQL 要高? 是不是说 MYSQL 这块儿的优化做得特别差?
337136897
2018-10-31 10:42:38 +08:00
@sun1991 那应该咋整
zhaishunqi
2018-10-31 10:51:22 +08:00
先试试 sql 优化吧...
先通过条件过滤数据量大的表,作为一张虚拟表,然后再用数据量不大的表和过滤出来的结果进行联查试试吧.
当然关键的检索字段加索引,但是也不要太多索引.
实在不行,考虑下重新设计这部分的功能吧.
eslizn
2018-10-31 10:51:31 +08:00
@sun1991 +1,合理利用好索引,避免笛卡尔积的情况下 连表查比分开多次查效率要高的多
teddy2725
2018-10-31 10:56:16 +08:00
买个 rds, 优化下 sql,cpu 占用这么高估计是 join 多了,索引设计不合理
wysnylc
2018-10-31 11:17:13 +08:00
拆分多表 sql 为单表,使用 parallelStream 或者 CompleTableFuture 推荐)进行并行执行
去 join 和并行执行才能从代码上提高效率,其他的都是硬件提高导致性能提高而已
leriou
2018-10-31 11:20:12 +08:00
@337136897 现代业务方向是将业务放要使用的数据提前准备好, 准备方式是离线计算+实时计算, 尤其是多表查询用到的数据, 后台实时计算出来存储到 nosql 层, 前台业务的读请求只走 nosql, mysql 这种只对核心的关键业务开发, 大部分业务触及不到 mysql, 需要使用的数据预先处理到缓存层
neoblackcap
2018-10-31 11:30:33 +08:00
@sun1991 +1,不看查询计划,不看索引情况,上来直接禁止 JOIN,分表查询,上 nosql。这大概是 V2EX 数据库调优的政治正确。

@337136897 我觉得你调优先看慢查询定位问题。如果查询问题都不大,就是机器性能不行就提高 rds 实例性能。
e9e499d78f
2018-10-31 11:31:18 +08:00
开个 ssh 让那个谁上去看看
micean
2018-10-31 11:35:44 +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