PostgreSQL 分页查询 CPU 吃满的问题

2021-08-25 11:13:39 +08:00
 Uyuhz

疑问

数据库服务器配置 20 核 32G,单机。100 并发持续时间 180 秒对某个简单分页查询接口进行压测。
期间应用服务器正常,数据库连接正常,但数据库服务器 CPU 占满,请问这是正常现象还是啥问题....

sql

单表分页的首页查询,表内 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%'

执行计划

使用 pg_stat_statements 查看

压测结果

3284 次点击
所在节点    PostgreSQL
25 条回复
zoharSoul
2021-08-25 12:34:37 +08:00
大表不要 count
Uyuhz
2021-08-25 13:20:23 +08:00
@zoharSoul 业务需要,无可避免啊
qinxi
2021-08-25 14:17:36 +08:00
@Uyuhz #2 业务上可以缓存计数.
qinxi
2021-08-25 14:18:34 +08:00
@qinxi #3 完了.带 like..当我没说.查询条件多变的话缓存也救不了
laozhoubuluo
2021-08-25 14:19:04 +08:00
EXPLAIN 看下索引是否设置正确。
另外如果业务经常使用 COUNT(*) ,建议把相关值放入内存缓存或者缓存表。
laozhoubuluo
2021-08-25 14:21:12 +08:00
@laozhoubuluo 带 LIKE 的话效率不太好优化了就。除非上一些比较复杂的优化,例如搜索数据全量进缓存后续读取靠缓存,以及单独的检索服务器之类的。
Uyuhz
2021-08-25 14:21:50 +08:00
@laozhoubuluo 查询条件多变的情况如何处理呢,这个值很难保证准确吧。。。
laozhoubuluo
2021-08-25 14:29:23 +08:00
@Uyuhz 加 gin 索引 & pg_trgm 模块是个可以尝试的办法。不过得分析下主要的查询方向交给 DBA 看看怎么加比较优化。
Uyuhz
2021-08-25 15:47:08 +08:00
@laozhoubuluo EXPLAIN 看 like 'c%' 是走了索引的,另外关键是没有 DBA....不然这活轮得到我吗....
ColinZeb
2021-08-25 16:27:42 +08:00
select a,b,c from t where id in (select id from t limit)
aragakiyuii
2021-08-25 17:52:11 +08:00
VACUUM 之后再试试?
aragakiyuii
2021-08-25 17:53:10 +08:00
vacuum analyze tablename
Uyuhz
2021-08-25 18:10:17 +08:00
@aragakiyuii 尝试了下 吞吐量到了 108,估计是误差,cpu 未见效果
netnr
2021-08-25 19:15:10 +08:00
新版本 索引 有优化
借一部说话
pgsql 不(傻瓜)支持忽略大小写查询,业务开展有困扰吗,其它几个关系型数据库都支持
oracle mssql mysql 起步 300M,而 pgsql 只需要 30M,而且性能测评还占上风,对于个站小🐔部署优势巨大,就卡在大小写查询的问题(用 EFCore)
zjp
2021-08-25 19:29:18 +08:00
@netnr 我选 citext 类型
liuxu
2021-08-25 19:32:04 +08:00
mysql 没命中索引的时候 cpu 消耗相当高
liuxu
2021-08-25 19:32:29 +08:00
@liuxu 关系型数据库都是
littlewing
2021-08-25 19:41:31 +08:00
上 es
dorothyREN
2021-08-25 20:06:25 +08:00
@netnr #14 这个难道不是你的问题吗?
aragakiyuii
2021-08-25 23:33:35 +08:00
@Uyuhz del_flag 和 c 都有索引嘛?

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

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

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

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

© 2021 V2EX