云数据库 SelectDB 版旨在提供卓越的性能和便捷的数据分析服务,在宽表聚合、多表关联以及高并发点查等场景下均具有优异的性能表现。本文将为您介绍,在Linux环境下,如何使用TPC-DS标准测试SelectDB复杂查询的性能以及测试结果。
概述
TPC-DS(Transaction Processing Performance Council Decision Support Benchmark)是由TPC(Transaction Processing Performance Council)组织开发的,以决策支持为重点的基准测试,旨在评估不同系统在处理复杂查询和大规模数据分析方面的性能。
TPC-DS的设计目标是模拟现实业务中的复杂决策。它通过一系列复杂的查询和数据操作来测试系统的性能,所涉及的查询类型包括联接、聚合、排序、过滤、子查询等。这些查询涵盖了从简单到复杂的各种场景,例如报表生成、数据挖掘、OLAP(联机分析处理)等。
准备工作
步骤一:准备目标实例
- 准备实例。 - 如果您已有目标实例,您需根据以下要求检查实例配置。 - 如果您还没有目标实例,您需创建实例。 - 本文中进行性能测试所用实例需满足以下要求。 - 内核版本大于等于4.0。 - 如果您已有目标实例,但版本小于4.0,您可升级实例达到版本要求。具体操作,请参见升级内核版本。 
- 规格需高于或等于96核 384 GB。本文中的测试基于96核 384 GB的规格进行。 
- 集群缓存空间需大于等于1200 GB。本文中的测试基于1200 GB的缓存空间进行。 
 
- 修改 - streaming_load_max_mb参数至最大值。- 在测试过程中,工具通过Stream load方式将测试数据上传至SelectDB。由于本次测试数据量较大,已超过默认的Stream load最大导入限制10240MB,因此您需要将BE的参数streaming_load_max_mb调整至最大值10240000MB。如何修改参数,请参见参数配置。 
- 创建待导入测试数据的目标库。 - 如果您已有目标库,跳过此操作。 - 连接实例,具体操作,请参见通过MySQL客户端连接云数据库SelectDB版实例。 
- 建库。 - 本次测试的目标库为test_db。建表语句如下。 - CREATE DATABASE test_db;
 
步骤二:准备测试服务器
下述安装依赖工具的脚本适用于操作系统为Linux的服务器。如果您的服务器操作系统非Linux,您需自行修改安装脚本,以使其适应您的操作系统。
注意事项
您的服务器需注意以下事项。
- 如果您准备在服务器使用Git下载TPC-DS测试工具。您需开通公网。 - 新购ECS实例:需购买ECS时,公网 IP勾选分配公网 IPv4 地址。 
- 已有ECS实例但未开通公网:ECS开通公网,请参见开通公网。 
 
- 此次测试数据集生成的数据文件约1000GB,需确保服务器的内存足够大。 
- 创建目标服务器。 - 如果您已有目标服务器,跳过此步骤。 - 如果您还没有目标服务器,您可自定义购买ECS实例,镜像选择Alibaba Cloud Linux。 
- 安装测试中的依赖工具。 - 安装MySQL客户端。 - yum install mysql
- 安装unzip。 - yum install unzip
- 安装jq。 - yum install jq
- 安装CURL。 - yum install curl
 
- (可选)安装Git。 - 本次测试中,使用Git下载TPC-DS工具。若已通过其他方式获取TPC-DS工具并准备手动上传至服务器,可跳过此步骤。 - yum install git
步骤三:确保网络互通
确保将安装TPC-DS测试工具的目标服务器与SelectDB实例网络互通:
步骤四:了解本次测试数据集
TPC-DS的标准测试数据集通常和实际业务场景差距较大,并且部分测试会针对测试数据集进行参数调优。所以标准测试数据集的测试结果仅能反映数据库在特定场景下的性能表现。建议您使用实际业务数据进行进一步的测试。
本次测试TPC-DS会生成1000GB的数据,并将其导入SelectDB,以进行SelectDB的性能测试。以下是关于测试数据集为1000GB数据表的相关说明。
| TPC-DS表名 | 行数 | 
| customer_demographics | 1,920,800 | 
| reason | 65 | 
| warehouse | 20 | 
| date_dim | 73,049 | 
| catalog_sales | 1,439,980,416 | 
| call_center | 42 | 
| inventory | 783,000,000 | 
| catalog_returns | 143,996,756 | 
| household_demographics | 7,200 | 
| customer_address | 6,000,000 | 
| income_band | 20 | 
| catalog_page | 30,000 | 
| item | 300,000 | 
| web_returns | 71,997,522 | 
| web_site | 54 | 
| promotion | 1,500 | 
| web_sales | 720,000,376 | 
| store | 1,002 | 
| web_page | 3,000 | 
| time_dim | 86,400 | 
| store_returns | 287,999,764 | 
| store_sales | 2,879,987,999 | 
| ship_mode | 20 | 
| customer | 12,000,000 | 
操作步骤
下述脚本适用于操作系统为Linux的服务器。如果您的服务器操作系统非Linux,您需自行修改安装脚本,以使其适应您的操作系统。
步骤一:登录目标服务器
如果您的服务是阿里云ECS,如何登录请参见连接ECS。
其他服务器如何登录,参见各自产品。
步骤二:安装TPC-DS测试工具
- 下载工具。 - 本次测试使用Git下载工具,具体脚本如下。 - git clone https://github.com/apache/doris.git && cd ./doris/tools/tpcds-tools- 您也可以通过tpcds-tools链接下载工具后,手动上传至目标服务器。 
- 编译工具。 - 执行以下脚本,编译工具。 - sh bin/build-tpcds-tools.sh
步骤三:生成TPC-DS测试数据集
数据量越大,生成时间越长,具体取决于服务器的性能。
您需在测试工具安装目录下执行生成测试数据集的脚本。
语法如下。
sh bin/gen-tpcds-data.sh -s <yourAimDataNum>参数说明如下。
yourAimDataNum:
- 含义:需要使用TPC-DS生成的数据大小。 
- 单位:GB 
此次测试为中规模测试,需要生成1000 GB(即 1 TB)的测试数据集。该步骤所需时间可能较长,建议您将该任务置于后台执行,语句如下。
nohup sh bin/gen-tpcds-data.sh -s 1000 > gen-tpcds-data.log 2>&1 &执行结果将会保存在测试工具安装目录的gen-tpcds-data.log文件中,可通过查看该文件获取执行过程是否正常。
测试数据集将保存在测试工具安装目录的bin目录下的tpcds-data目录中,数据文件后缀为.dat。
步骤四:使用脚本为SelectDB创建用于测试的表
- 配置SelectDB实例信息。 - 在执行建表脚本前,需要在 - doris-cluster.conf文件中,配置SelectDB实例的相关信息。该文件位于测试工具安装目录- tpcds-tools/conf/下。示例如下。- # Any of FE host export FE_HOST='selectdb-cn-******.selectdbfe.rds.aliyuncs.com' # http_port in fe.conf export FE_HTTP_PORT=8080 # query_port in fe.conf export FE_QUERY_PORT=9030 # Doris username export USER='admin' # Doris password export PASSWORD='******' # The database where TPC-DS tables located export DB='test_db'- 参数说明如下。 - 参数名称 - 参数描述 - FE_HOST - SelectDB实例的访问地址。 - 您可以从SelectDB控制台的实例详情中的网络信息中获取实例的VPC地址或公网地址。 - FE_HTTP_PORT - SelectDB实例的HTTP协议端口。 - 目前SelectDB该端口默认为8080。 - 具体您可以从SelectDB控制台的实例详情中的网络信息中获取实例的HTTP协议端口。 - FE_QUERY_PORT - SelectDB实例的MySQL协议端口。 - 目前SelectDB该端口默认为9030. - 具体您可以从SelectDB控制台的实例详情中的网络信息中获取实例的MySQL协议端口。 - USER - SelectDB实例账号。 - 创建SelectDB实例后,系统会默认为您创建admin账号。 - PASSWORD - SelectDB实例账号的密码。 - 如果您的USER配置的是admin账号,但您忘记了此账号的密码,您可以在控制台上重置实例admin密码。 - DB - SelectDB实例中待导入数据的库名。 
- 建表。 - 在测试工具安装目录下,执行以下脚本,创建用以测试的表。脚本执行完成后,SelectDB的目标库中,会生成上述步骤四:了解本次测试数据集中的表。 - sh bin/create-tpcds-tables.sh -s 1000
步骤五:导入数据至SelectDB
测试数据量越大,导入时间越长,具体取决于服务器的性能。
在测试工具安装目录下,执行以下脚本,完成TPC-DS测试集所有数据的导入至SelectDB。
sh bin/load-tpcds-data.sh此次测试为中规模测试,需要将生成的1000 GB(即 1 TB)的测试数据集导入至SelectDB中。该步骤所需时间可能较长,建议您将该任务置于后台执行,语句如下。
nohup sh bin/load-tpcds-data.sh > load-tpcds-data.log 2>&1 &执行结果将会保存到测试工具安装目录下的load-tpcds-data.log文件中,可通过查看该文件获取执行过程是否正常。
步骤六:测试查询性能
- 批量测试查询SQL性能重要- 测试数据量越大,批量测试时间越长,具体取决于服务器的性能。 - 您可以执行TPC-DS测试SQL的相关脚本,批量执行测试集的SQL。 - 语法如下。 - sh bin/run-tpcds-queries.sh -s <yourAimDataNum>- 参数说明如下。 - yourAimDataNum:确保查询针对正确规模的数据集运行,与生成数据时的规模一致(即生成数据时若用 - -s 1000,运行查询时也需使用- -s 1000)。- 脚本执行完毕后,控制台窗口将显示测试集中每个SQL在SelectDB中的性能情况。 - 此次测试为中规模测试,需要测试查询的1000 GB(即 1 TB)的测试数据集。该步骤所需时间可能较长,建议您将该任务置于后台执行,语句如下。 - nohup sh bin/run-tpcds-queries.sh -s 1000 > run-tpcds-queries.log 2>&1 &- 查询结果将会保存到到测试工具安装目录下的run-tpcds-queries.log文件中,可通过查看该文件获取查询过程是否正常的信息以及查询测试的结果。本文档针对1000GB数据的测试结果,请参见测试结果。 
- 单条查询SQL性能测试- 您也可以对SelectDB执行某个SQL的性能进行测试,具体操作如下: - 连接SelectDB实例。具体操作,请参见通过DMS连接云数据库SelectDB版实例。 
- 执行目标SQL。您可以在TPCDS-Query-SQL中获取目标SQL。 说明- TPCDS-Query-SQL中的SQL也是上述通过脚本批量测试中执行的SQL。 
 
测试结果
以下为在规格为96核384GB、集群缓存空间为1200GB的SelectDB实例上进行的TPC-DS 1000GB查询性能测试结果。
| Query | TPC-DS 1000GB(s) | 
| Q1 | 0.71 | 
| Q2 | 6.8 | 
| Q3 | 0.39 | 
| Q4 | 13.68 | 
| Q5 | 0.82 | 
| Q6 | 0.32 | 
| Q7 | 0.83 | 
| Q8 | 0.39 | 
| Q9 | 10.6 | 
| Q10 | 0.5 | 
| Q11 | 8.61 | 
| Q12 | 0.13 | 
| Q13 | 1.05 | 
| Q14_1 | 8.59 | 
| Q14 | 8.47 | 
| Q15 | 0.56 | 
| Q16 | 0.45 | 
| Q17 | 1.63 | 
| Q18 | 0.81 | 
| Q19 | 0.35 | 
| Q20 | 0.14 | 
| Q21 | 0.11 | 
| Q22 | 2.12 | 
| Q23_1 | 24.81 | 
| Q23 | 24.54 | 
| Q24_1 | 4.47 | 
| Q24 | 4.5 | 
| Q25 | 1.18 | 
| Q26 | 0.29 | 
| Q27 | 0.77 | 
| Q28 | 10.24 | 
| Q29 | 1.18 | 
| Q30 | 0.39 | 
| Q31 | 3.4 | 
| Q32 | 0.07 | 
| Q33 | 0.51 | 
| Q34 | 1.01 | 
| Q35 | 1.66 | 
| Q36 | 0.63 | 
| Q37 | 0.08 | 
| Q38 | 7.14 | 
| Q39_1 | 0.46 | 
| Q39 | 0.48 | 
| Q40 | 0.16 | 
| Q41 | 0.04 | 
| Q42 | 0.14 | 
| Q43 | 1.63 | 
| Q44 | 2.95 | 
| Q45 | 0.42 | 
| Q46 | 1.8 | 
| Q47 | 3.19 | 
| Q48 | 0.96 | 
| Q49 | 1.03 | 
| Q50 | 1.75 | 
| Q51 | 4.26 | 
| Q52 | 0.16 | 
| Q53 | 0.35 | 
| Q54 | 1.9 | 
| Q55 | 0.15 | 
| Q56 | 0.4 | 
| Q57 | 1.78 | 
| Q58 | 0.34 | 
| Q59 | 10.6 | 
| Q60 | 0.51 | 
| Q61 | 0.81 | 
| Q62 | 1.36 | 
| Q63 | 0.35 | 
| Q64 | 1.79 | 
| Q65 | 6.23 | 
| Q66 | 0.48 | 
| Q67 | 37.61 | 
| Q68 | 1.56 | 
| Q69 | 1.81 | 
| Q70 | 4.43 | 
| Q71 | 0.58 | 
| Q72 | 4.81 | 
| Q73 | 0.92 | 
| Q74 | 7.15 | 
| Q75 | 6.33 | 
| Q76 | 1.74 | 
| Q77 | 0.48 | 
| Q78 | 20.12 | 
| Q79 | 4.12 | 
| Q80 | 0.79 | 
| Q81 | 0.69 | 
| Q82 | 0.39 | 
| Q83 | 0.24 | 
| Q84 | 0.17 | 
| Q85 | 0.88 | 
| Q86 | 1.07 | 
| Q87 | 8.14 | 
| Q88 | 8.1 | 
| Q89 | 0.55 | 
| Q90 | 0.18 | 
| Q91 | 0.15 | 
| Q92 | 0.06 | 
| Q93 | 2.5 | 
| Q94 | 0.33 | 
| Q95 | 0.48 | 
| Q96 | 0.95 | 
| Q97 | 6.39 | 
| Q98 | 0.31 | 
| Q99 | 2.46 | 
| 合计 | 327.9 |