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

2025 年 11 月 19 日
 shendaowu

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

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

3412 次点击
所在节点    数据库
14 条回复
michael2016
2025 年 11 月 19 日
做数据库性能测试时,建议遵循 “基准 -> 负载 -> 极限 -> 稳定性” 的顺序。不要一上来就压垮数据库,而是要先建立基准,然后逐步加压,观察瓶颈是先出现在 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
2025 年 11 月 19 日
你说的测试是什么测试?单元测试?性能测试?

---

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

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

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

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

所以看起来你需要制造一些假数据来提升系统的负载?
感觉可以去看看 mock 测试相关的东西。。。
songco
2025 年 11 月 19 日
多年前搞过类似的测试

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

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

有条件第一种比较好

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

当然影响因素太多了,其实很难对比,当年我们的产品,各种优化,量上去了还是性能问题(比如银行客户,某些奇怪用法),后来 ssd 开始慢慢用于生产环境,我们自己测试,换 ssd 后数据库参数优化一下,性能 50 倍起步,之前各种折腾也就提升了大概 4-5 倍的样子,改动了好多设计,各种 migration ,之后就是建议客户上 ssd

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

https://v2ex.ih06.com/t/1173789

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

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

© 2021 V2EX