数据库性能测试的要点有哪些? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shendaowu
V2EX    数据库

数据库性能测试的要点有哪些?

  •  
  •   shendaowu 1 天前 1001 次点击

    我技术很烂,请尽量提供一些可能被笨蛋忽略的内容。比如不能只测查询,还要测相应的增删改。网上能搜到一点东西,但总感觉不放心。

    之前我问了个问题: t/1173631 。就一个回复,而且还那么多点击,感觉应该是不太行了。所以打算自己测试了。

    14 条回复    2025-11-19 23:56:45 +08:00
    michael2016
        1
    michael2016  
       1 天前   1
    做数据库性能测试时,建议遵循 “基准 -> 负载 -> 极限 -> 稳定性” 的顺序。不要一上来就压垮数据库,而是要先建立基准,然后逐步加压,观察瓶颈是先出现在 CPU 、I/O 还是锁冲突上。

    测试不仅仅是“跑分”,更重要的是“调优”。当性能不达标时,检查以下层面:

    SQL 语句优化: 这是最常见的原因,检查是否存在全表扫描、慢查询( Slow Query )、复杂的关联查询( Join )。

    索引 (Indexing): 索引是否缺失?或者索引失效?过多的索引也会影响写入性能。

    锁机制 (Locking): 是否存在大量的行锁竞争、死锁( Deadlock )?高并发下,锁等待时间过长会由数据库层面拖垮应用。

    配置参数 (Configuration):

    MySQL: innodb_buffer_pool_size, max_connections, innodb_flush_log_at_trx_commit 等。

    PostgreSQL: shared_buffers, work_mem, max_connections 等。

    硬件瓶颈:
    磁盘是 HDD 还是 SSD ? RAID 级别是什么? CPU 核数是否足够?内存是否够用?网络或磁盘 IO
    CEBBCAT
        2
    CEBBCAT  
       1 天前   1
    你说的测试是什么测试?单元测试?性能测试?

    ---

    @michael2016 不太确定你是不是贴的 LLM-generated content ,提醒一下,如果是的话,可能会被删号
    shendaowu
        3
    shendaowu  
    OP
       1 天前
    @CEBBCAT 性能测试,标题里说了。具体是正文第二段链接里的那个东西。
    yjhatfdu2
        4
    yjhatfdu2  
       1 天前
    @CEBBCAT 一看就是 LLM
    yjhatfdu2
        5
    yjhatfdu2  
       1 天前
    主要还是看你的业务需求,按照实际使用情况,设计测试用例,然后使用测试工具测试。比如你的场景可以按照预期的标签数量、写入查询的比例,并且适当放大,然后用 pgbench 等来压测,观察 cpu 、内存、IO 、连接数之类的压力。另外,还可以用 explain analyse 来详细分析单个查询是不是比较科学,有没有优化空间。顺便,#2 这样分段这么清楚,说的这么清楚但是不贴合问题的,一眼 AI
    CEBBCAT
        6
    CEBBCAT  
       1 天前
    @shendaowu 性能测试就测试外部端点就好了,或者说,按照使用者的角度,测试功能的流畅程度。在这个大目标下可以拆解为其他便于工程实践的小测试 case 。

    你新手吗? quick start ,不要思虑过多

    ---
    @yjhatfdu2 我看着挺像的,叽里咕噜说了一堆,但特征点不是很强,贸然说别人是 AI 写的似乎也很唐突。。。
    yjhatfdu2
        7
    yjhatfdu2  
       1 天前
    @CEBBCAT 这个回答一看就没有看 OP 的原问题,原问题是描述了一个具体的场景的,而且明确是 postgresql ,而这个回复十分的通用甚至没有回答正文的内容,只能回复”数据库性能测试的要点有哪些?“,而且标点格式十分规范,英文标注,引号的使用,十分像不是很高级的 AI
    ntedshen
        8
    ntedshen  
       1 天前
    你业务都没铺开就不要去想 benchmark 。。。
    我不是说这么干没意义。。。
    但是第一个,别人看不懂你什么想法
    第二个,业务你要跑不通,做什么都是白搭。。。
    deplives
        9
    deplives  
       1 天前
    @michael2016 这不是那个爹味面试官吗?回答的就这?甚至都不是自己写的
    https://v2ex.com/t/1160112
    shendaowu
        10
    shendaowu  
    OP
       23 小时 26 分钟前
    @ntedshen #8 不是。我主要是怕我那个花活根本就支撑不了多大的数据量,我主要不是为了优化性能。我没说明白。
    AutumnVerse
        11
    AutumnVerse  
       23 小时 1 分钟前 via iPhone
    @shendaowu 别瞎想了,现代数据库已经非常强大了,强大的你啥都不要做,撑几万几十万 qps 轻轻松松,你业务要多久才能到这规模

    当你真到这个瓶颈的时候,你也会发现扩容也很简单,几乎啥都不用干,加几台机器,性能又能翻几倍
    shendaowu
        12
    shendaowu  
    OP
       22 小时 31 分钟前
    @AutumnVerse #11 问题是我的花活是一般人强烈不建议的。他要是个点查我才不会管。我怕它出现类似组合爆炸的问题。我只是个野生程序员,我的直觉和经验都不够,不敢猜和想。
    ntedshen
        13
    ntedshen  
       22 小时 21 分钟前   1
    @shendaowu 换 linux 解决 20%的问题,换固态解决 79%的问题(狗头

    所以看起来你需要制造一些假数据来提升系统的负载?
    感觉可以去看看 mock 测试相关的东西。。。
    songco
        14
    songco  
       18 小时 17 分钟前 via Android   1
    多年前搞过类似的测试

    主要方式是模拟负载
    有两种,一种是抓生产环境负载,一天或者一周的,然后按时间发起请求记录每个请求响应时间,有可能需要放大

    还有就是算法模拟负载,比如 80%热点之类的

    有条件第一种比较好

    主要是身边环境数据比较真实(比如实现的比较烂),很多测试过于简单了

    当然影响因素太多了,其实很难对比,当年我们的产品,各种优化,量上去了还是性能问题(比如银行客户,某些奇怪用法),后来 ssd 开始慢慢用于生产环境,我们自己测试,换 ssd 后数据库参数优化一下,性能 50 倍起步,之前各种折腾也就提升了大概 4-5 倍的样子,改动了好多设计,各种 migration ,之后就是建议客户上 ssd
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4000 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 10:14 PVG 18:14 LAX 02:14 JFK 05:14
    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