数据库服务器配置 20 核 32G,单机。100 并发持续时间 180 秒对某个简单分页查询接口进行压测。
期间应用服务器正常,数据库连接正常,但数据库服务器 CPU 占满,请问这是正常现象还是啥问题....
单表分页的首页查询,表内 1000 万数据,筛选出的数据为 28w,大概 sql 如下:
SELECT a,b,c,d,e FROM table WHERE del_flag = 0 AND c LIKE 'c%' order by e desc limit 10
SELECT COUNT(*) FROM table WHERE del_flag = 0 AND c LIKE 'c%'
1
zoharSoul 2021-08-25 12:34:37 +08:00
大表不要 count
|
5
laozhoubuluo 2021-08-25 14:19:04 +08:00
EXPLAIN 看下索引是否设置正确。
另外如果业务经常使用 COUNT(*) ,建议把相关值放入内存缓存或者缓存表。 |
6
laozhoubuluo 2021-08-25 14:21:12 +08:00
@laozhoubuluo 带 LIKE 的话效率不太好优化了就。除非上一些比较复杂的优化,例如搜索数据全量进缓存后续读取靠缓存,以及单独的检索服务器之类的。
|
7
Uyuhz OP @laozhoubuluo 查询条件多变的情况如何处理呢,这个值很难保证准确吧。。。
|
8
laozhoubuluo 2021-08-25 14:29:23 +08:00
@Uyuhz 加 gin 索引 & pg_trgm 模块是个可以尝试的办法。不过得分析下主要的查询方向交给 DBA 看看怎么加比较优化。
|
9
Uyuhz OP @laozhoubuluo EXPLAIN 看 like 'c%' 是走了索引的,另外关键是没有 DBA....不然这活轮得到我吗....
|
10
ColinZeb 2021-08-25 16:27:42 +08:00
select a,b,c from t where id in (select id from t limit)
|
11
aragakiyuii 2021-08-25 17:52:11 +08:00 via iPhone
VACUUM 之后再试试?
|
12
aragakiyuii 2021-08-25 17:53:10 +08:00 via iPhone
vacuum analyze tablename
|
13
Uyuhz OP @aragakiyuii 尝试了下 吞吐量到了 108,估计是误差,cpu 未见效果
|
14
netnr 2021-08-25 19:15:10 +08:00 via Android
新版本 索引 有优化
借一部说话 pgsql 不(傻瓜)支持忽略大小写查询,业务开展有困扰吗,其它几个关系型数据库都支持 oracle mssql mysql 起步 300M,而 pgsql 只需要 30M,而且性能测评还占上风,对于个站小🐔部署优势巨大,就卡在大小写查询的问题(用 EFCore) |
16
liuxu 2021-08-25 19:32:04 +08:00
mysql 没命中索引的时候 cpu 消耗相当高
|
18
littlewing 2021-08-25 19:41:31 +08:00
上 es
|
19
dorothyREN 2021-08-25 20:06:25 +08:00
@netnr #14 这个难道不是你的问题吗?
|
20
aragakiyuii 2021-08-25 23:33:35 +08:00 via iPhone
@Uyuhz del_flag 和 c 都有索引嘛?
|
21
Uyuhz OP @aragakiyuii 前者无,后者有
|
22
aragakiyuii 2021-08-26 10:48:12 +08:00
|
23
Uyuhz OP @aragakiyuii 感谢,我先研究下
|
24
bthulu 2021-08-26 12:03:15 +08:00
可以指定慢 sql 使用某个 cpu 核心, 让这个核心慢慢跑就是了. 比如 8C16G, 打满一个核心, cpu 占用率也就 12.5%
|
25
encro 2022-03-05 20:17:05 +08:00
你都 like 了,还要什么性能。
|