怎样做数据库运算性能测试?

新出现的数据库产品通常会标榜自己的运算速度“最快”、“更快”,但在实际应用中却常常达不到让人满意的性能。因此,事先做好运算性能测试,是数据库选型成功的关键。很多用户对性能测试不熟悉,容易出现一些误区。这里整理了一些关键的注意事项,并给出了建议:

1、 不能偷懒迷信国际标准。

业界有数据库运算测试的国际标准。比如 TPCH,其中的测试题经过精心设计,简单且有一定覆盖性(分组,关联、子查询都有),确实有参考价值和权威性。很多用户不想自己设计测试题,就直接用国际标准完成测试。但是,这些标准大都是测试 SQL 的,只会包含用 SQL 写出时不至于过于复杂的运算。而实际业务的复杂度一般都要远超这些测试,有很多用 SQL 实现比较困难,甚至无法实现的运算场景。比如普遍存在的有序计算,以及复杂的过程计算等等,往往只能用存储过程或者外部编程才能实现。

也就是说,国际标准测试的内容通常较为基础,如果连国际标准测试都跑不好,那肯定不会是好数据库(从运算性能上讲)。而能把国际标准跑得好,却不表示这个数据库的性能就好了。国际标准只是个必要条件,用户不要迷信。在这些国际标准的基础上,还要从自己的实际场景寻找、提炼出更多测试题。两类题目共同测试,得到的结论更能经得起实际应用的考验。

2、 测试题要围绕应用目标设计,体现运算的关键特征

测试题既不能照搬项目中的全部运算,也不能简化丢失运算的关键特征,必须围绕数据库的应用目标来设计。如果数据库要用于离线跑批计算,那么测试重点是存储过程等分步计算能力,还要看中间结果落地的性能。这时候并发计算性能就不太重要了。如果要用于多维分析计算,则往往需要用宽表,所以测试表的字段要足够多,还要考虑多层维表,以及并发访问性能。如果是用做报表后台计算,就要考虑多表关联等复杂计算,并发能力也很重要。对于定点查找计算,也就是从大量数据中找出很少量的目标,就要重点测试索引和大并发性能。

也有些数据库要兼顾多个目标,是几种任务的综合库,那么多种测试重点都需要考虑到。实际上,一种数据库不可能在各个方面都有优势,需要通过各方面的测试来明确数据库优势侧重点。

3、 外围准备时间是否计入运算耗时,要根据场景决定。

有些数据库会要求某些准备和外围工作,包括数据入库和出库,多维分析的预汇总冗余数据,定点查找的建立、更新索引等。准备工作的时间一般都比较长,如果是多维分析、报表后台、定点查找等在线查询类任务,数据库运算会反复执行很多次,准备工作时间长一些并不影响查询性能,可以不计入运算耗时。离线跑批类任务只执行一次,所以每次运算前必须完成的准备时间也要加到任务执行时间上。

外围准备计算有各种形式,有些技术(比如 SPL)要求一定的准备工作(数据有序存储等),看起来是增加了运算量,但是 SPL 不需要出库入库,测试时要统一考虑。

另外,有些外围准备的任务是否允许执行,也要看实际项目的需要。比如内存预加载可以提高计算性能,但如果实际环境中内存比较紧张,那就要考虑禁用这个外围任务。

4、 注意硬件环境与测试任务的匹配。

测试环境的硬件配置应该在题目中统一设计,否则测试结果也可能会出现很大偏差。

测试时,如果内存大到比数据总量还大,数据就会被全部装入内存计算,无法测试出数据库外存运算的能力

即使总数据量大于内存,也还要看数据是否列存。列存且参加计算的列很少,数据也会被全部加载到内存中。此时,还要让足够多的列参加计算,才能测出数据库外存计算的能力。

采用虚拟机来限制内存大小是很便捷有效的方式,这时可以用相对较小的数据量完成测试,能够降低测试工作量。

实际业务中服务器可能要跑多任务,题目中的运算往往不能独占所有的硬件资源。所以测试服务器硬件资源只能相当于实际服务器的空闲部分。

有些用户的实际环境已经是私有云了,所以测试题要考虑采用常见的云主机(虚拟机)规格,方便用户搭建测试环境。

有些数据库对存储有适应性,可能在固态硬盘(SSD)上跑得好,在普通机械硬盘就跑不好。用户要考虑自己的实际环境是否适配,或者是否能改造成目标数据库适应的样子。

5、 单机测试优先。

很多数据库厂家宣称的分布式计算指标看起来很好,因此用户往往一开始就考虑搭建集群环境来测试数据库的运算能力。其实,在大部分情况下,单机测试就能暴露出运算存在的性能问题。所以建议先做单机测试,再考虑集群,可以大大减少测试的成本。

单机跑得快的数据库,在集群时确实不一定能跑得快。而单机都跑不快的数据库,集群就不可能跑的快,这一点和国际标准类似是个必要条件。先测单机,就可以用较低成本淘汰一些不合适的备选产品。

6、 厂商发布的测试报告要仔细研读。

有些厂商自己发布的报告只说快了 N 倍,并不说场景和环境,这属于耍流氓,实际上没有什么参考价值。测试报告关键是要可再现,即时换一个人也要能重复出来。TPCH 这些就是可再现的,所以它才有一定的权威性。

所以,在看别人做的测试报告时,要注意是否提供了测试数据,或者提供造数据的程序;运算代码是不是列出来了,硬件环境是不是都说明白了。有了这些,任何人都可以再现这个测试。

下面这一套 SPL 发布的性能测试报告,每一套题目都有明确的应用目标和运算关键特征,给出了数据规模、硬件配置、测试数据(或生成数据的程序)、运算代码、测试结果等等,完全可以再现出来。而且,这些测试中的硬件配置都服务于测试任务,可以有效的测试出外存运算能力、多表关联能力、时间有序计算能力等等,可作为用户自己设计测试题的重要参考。

SPL 计算性能系列测试:TPCH

SPL 计算性能系列测试:关联表及宽表

SPL 计算性能系列测试:多指标统计

SPL 计算性能系列测试:位置关联

SPL 计算性能系列测试:漏斗分析

SPL 计算性能系列测试:组内累计跑批