PostgreSQL 分页查询 CPU 吃满的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Uyuhz
V2EX    PostgreSQL

PostgreSQL 分页查询 CPU 吃满的问题

  •  
  •   Uyuhz 2021 年 8 月 25 日 3692 次点击
    这是一个创建于 1610 天前的主题,其中的信息可能已经有所发展或是发生改变。

    疑问

    数据库服务器配置 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 查看

    压测结果

    25 条回复    2022-03-05 20:17:05 +08:00
    zoharSoul
        1
    zoharSoul  
       2021 年 8 月 25 日
    大表不要 count
    Uyuhz
        2
    Uyuhz  
    OP
       2021 年 8 月 25 日
    @zoharSoul 业务需要,无可避免啊
    qinxi
        3
    qinxi  
       2021 年 8 月 25 日
    @Uyuhz #2 业务上可以缓存计数.
    qinxi
        4
    qinxi  
       2021 年 8 月 25 日
    @qinxi #3 完了.带 like..当我没说.查询条件多变的话缓存也救不了
    laozhoubuluo
        5
    laozhoubuluo  
       2021 年 8 月 25 日
    EXPLAIN 看下索引是否设置正确。
    另外如果业务经常使用 COUNT(*) ,建议把相关值放入内存缓存或者缓存表。
    laozhoubuluo
        6
    laozhoubuluo  
       2021 年 8 月 25 日
    @laozhoubuluo 带 LIKE 的话效率不太好优化了就。除非上一些比较复杂的优化,例如搜索数据全量进缓存后续读取靠缓存,以及单独的检索服务器之类的。
    Uyuhz
        7
    Uyuhz  
    OP
       2021 年 8 月 25 日
    @laozhoubuluo 查询条件多变的情况如何处理呢,这个值很难保证准确吧。。。
    laozhoubuluo
        8
    laozhoubuluo  
       2021 年 8 月 25 日
    @Uyuhz 加 gin 索引 & pg_trgm 模块是个可以尝试的办法。不过得分析下主要的查询方向交给 DBA 看看怎么加比较优化。
    Uyuhz
        9
    Uyuhz  
    OP
       2021 年 8 月 25 日
    @laozhoubuluo EXPLAIN 看 like 'c%' 是走了索引的,另外关键是没有 DBA....不然这活轮得到我吗....
    ColinZeb
        10
    ColinZeb  
       2021 年 8 月 25 日
    select a,b,c from t where id in (select id from t limit)
    aragakiyuii
        11
    aragakiyuii  
       2021 年 8 月 25 日 via iPhone
    VACUUM 之后再试试?
    aragakiyuii
        12
    aragakiyuii  
       2021 年 8 月 25 日 via iPhone
    vacuum analyze tablename
    Uyuhz
        13
    Uyuhz  
    OP
       2021 年 8 月 25 日
    @aragakiyuii 尝试了下 吞吐量到了 108,估计是误差,cpu 未见效果
    netnr
        14
    netnr  
       2021 年 8 月 25 日 via Android
    新版本 索引 有优化
    借一部说话
    pgsql 不(傻瓜)支持忽略大小写查询,业务开展有困扰吗,其它几个关系型数据库都支持
    oracle mssql mysql 起步 300M,而 pgsql 只需要 30M,而且性能测评还占上风,对于个站小部署优势巨大,就卡在大小写查询的问题(用 EFCore)
    zjp
        15
    zjp  
       2021 年 8 月 25 日
    @netnr 我选 citext 类型
    liuxu
        16
    liuxu  
       2021 年 8 月 25 日
    mysql 没命中索引的时候 cpu 消耗相当高
    liuxu
        17
    liuxu  
       2021 年 8 月 25 日
    @liuxu 关系型数据库都是
    littlewing
        18
    littlewing  
       2021 年 8 月 25 日
    上 es
    dorothyREN
        19
    dorothyREN  
       2021 年 8 月 25 日
    @netnr #14 这个难道不是你的问题吗?
    aragakiyuii
        20
    aragakiyuii  
       2021 年 8 月 25 日 via iPhone
    @Uyuhz del_flag 和 c 都有索引嘛?
    Uyuhz
        21
    Uyuhz  
    OP
       2021 年 8 月 26 日
    @aragakiyuii 前者无,后者有
    aragakiyuii
        22
    aragakiyuii  
       2021 年 8 月 26 日
    Uyuhz
        23
    Uyuhz  
    OP
       2021 年 8 月 26 日
    @aragakiyuii 感谢,我先研究下
    bthulu
        24
    bthulu  
       2021 年 8 月 26 日
    可以指定慢 sql 使用某个 cpu 核心, 让这个核心慢慢跑就是了. 比如 8C16G, 打满一个核心, cpu 占用率也就 12.5%
    encro
        25
    encro  
       2022 年 3 月 5 日
    你都 like 了,还要什么性能。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3499 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 10:41 PVG 18:41 LAX 02:41 JFK 05:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86