少于 1 分钟读完

开局一张 DuckDB 团队提供的性能测试 checklist,然后再开始编本文的内容。

DuckDB Benchmark Checklist

本文简单聊一下我对数据库性能测试的一些看法,顺带推荐一下 DuckDB 的性能测试 checklist。

性能测试,准确点的术语叫基准测试(benchmark),很多时候的目的其实是为了 —— benchmarketing,搞市场营销。

市场营销其实是弱者与强者的角逐,有时候弱者需要巧妙地利用策略,像碰瓷一样挑战强者,以便在竞争激烈的市场中获得一席之地。

在数据库领域,性能测试就是那个最简单有效的策略。你吹嘘自己数据库比其他数据库好,以性能为依据,列出性能对比数据,用数据说话,令人信服;你吹嘘自己的数据库比其他数据库好用,空口无凭,怎么证明,让群众都去试用吗?白日做梦!

因此,碰瓷式的性能测试营销被数据库厂商所追捧。一些典型的案例:

  1. 某国产(大海容量)数据库宣传自己 TPCH 跑分世界第一(干过了 8 年前的 Oracle)。厉害了,我的国!
  2. 某数据砖头(🧱)数据库宣称自己的 price-performace 比某雪花(❄️)数据库强 x 倍。
  3. 某流式数仓新势力(🌊)宣称自己比老牌流计算(🐿)引擎快 x 倍。

读到这里你可能认为我不耻这类的碰瓷营销了,恰恰相反,我非常肯定这种行为。换做我是那个弱者(或者说新势力)公司,出于利益考虑,为了打响公司的知名度,谋得更多的市场,我也会这么干。

好了,瞎扯淡的就先聊到这里。下面我进入本文的正文,聊一下我对性能测试的一些看法。

读到这里的读者可能会内心不屑,认为前面 DuckDB 的 checklist 是精华,已经看过并吸收了,还有必要往下继续读吗?还读个屁啊!

这类读者你的想法很对!DuckDB 的 checklist 确实是精华,接下来我只能在此基础上狗尾续貂一下,补充一下我的一些经验之谈。

我的经验之谈非常多,这里地方太小写不下,因此我只写下最重要的一条:

  • 充分了解对方的系统后再测试!
  • 充分了解对方的系统后再测试!
  • 充分了解对方的系统后再测试!

比方说我要测试对比下 Postgres 和 TiDB。

Postgres 是全世界最先进的 OLTP 单机关系数据库,而 TiDB 是全中国最先进的分布式 HTAP 关系数据库,二者显然是有一战之力的,于是今天我就想对比一下 Postgres 和 TiDB 的 OLTP 性能。

这是一个苹果和橘子的比较,因为一个是单机数据库,一个是分布式数据库。

由于我比较穷,只能用一台机器来比较性能,这看起来对 TiDB 不太公平。不过 TiDB 你忍一下,你要想和 Postgres 这类单机数据库争单机市场,你必须得做好准备应对这类比较(往单机分布式一体化方向发展,向你的友商大海容量数据库学习一下~)

测试的结果根据你对两个系统的了解程度可能会有所不同。

如果你不了解 Postgres,你就不知道 Postgres 的索引是 B-tree,其写入性能很大程度上取决于 checkpoint 的频率(checkpoint 会把内存中的 B-tree page 刷盘,是磁盘随机 IO),你可能把 checkpoint 频率配的老高(或者不做 checkpoint),测出来 Postgres 写入场景性能远远地吊打基于 LSM-tree 的 TiDB,也可能把 checkpoint 频率配的老低(Postgres 的默认配置其实就是偏低的),测出来 TiDB 的写入性能远远吊打 Postgres。(为简化问题,我们这里有意忽略 Postgres append-only 般的 heap 表。)

如果你不了解 TiDB,你就不知道单机上 TiDB 的数据也会分片,又由于 TiDB 的索引是全局索引(表数据和索引数据不在同一份片),对一行数据的插入和更新可能也要走两阶段提交,要多出额外的 CPU 和 IO 开销。不妨思考一下,你是在测试单机性能,单机其实是不需要二阶段提交的(不需要数据节点间调度,(OLTP 场景)不需要查询并行),你就应该把 TiDB 配置成一个分片,让它可以和 Postgres 公平一战。

你必须先充分了解对方系统,然后在一个尽可能公平的环境中进行测试,才能获取令人信服的结果。然而,要实现绝对的公平是不可能的,这一点无需多言。尽管如此,我们仍然需要秉持公平的原则,尽可能深入了解测试系统,以避免产生错误的测试结果。尤其是在性能测试碰瓷营销时,如果我们的测试结果被发现漏洞,可能会引发公关危机,因此我们需要格外谨慎,以免闹出令人哑笑的局面。

最后,总结一下本文,DuckDB 的 benchmark checklist 是精华,务必仔细阅读(虽然正文没有一句是介绍它的具体内容的),我狗尾续貂的那部分,随意瞥过就好。

广告时间:欢迎关注我的知乎和微信公众号:黄金架构师。

参考:https://mytherin.github.io/papers/2018-dbtest.pdf.

分类:

更新时间:

留下评论