一、测试环境
在腾讯云购买不同规格的实例,进行 OLTP 和 SELECT 场景性能测试。
注意:OLTP 场景测试指混合读写测试,读写比例14:4。SELECT 场景测试指简单的主键查询。
·地域可用区:广州四区。
·实例资源:指定配置按照上述资源配置进行 CGroup 隔离。
·压测机器:由于压测机器需要安装额外的编译工具,同时在压测过程中需要消耗额外的系统资源,需要单独购买云服务器进行压力测试,建议使用计算型云服务器进行压力测试。
·测试环境实例规格配置:用户在购买指定规格后,集群通过 CGroup 实现规格限制。
| 节点配置 | GTM | CN | DN |
| 入门型 | 1核4GB | 1核4GB | 1核6GB |
| 基础Ⅰ型 | 1核4GB | 2核8GB | 2核12GB |
| 基础Ⅱ型 | 4核4GB | 4核16GB | 4核24GB |
| 中等Ⅰ型 | 4核4GB | 8核32GB | 8核48GB |
| 中等Ⅱ型 | 8核8GB | 16核64GB | 16核96GB |
| 高配Ⅰ型 | 16核16GB | 32核128GB | 32核192GB |
| 高配Ⅱ型 | 16核16GB | 64核256GB | 64核384GB |
·测试环境集群配置。
| 节点类型 | 配置模式 | 数量 |
| GTM | 1主1备 | 1 |
| CN | 1主1备 | 2 |
| DN | 1主1备 | 2 |
二、测试工具
Sysbench 是一款基于 LuaJITde 开源的、模块化的、跨平台的模块化多线程性能测试工具,可以执行数据库、CPU、内存、线程、IO 等方面的性能测试。
工具内置数据库测试模型,采用多线程并发操作来评估数据库的性能,目前支持的数据库:MySQL、Oracle 和 PostgreSQL。
本次采用 Sysbench 作为 TDSQL PostgreSQL版 在 OLTP 和 SELECT 场景中的性能测试工具。
本次测试使用的 Sysbench 版本为1.0.12,详细源码及其他说明信息请参考 sysbench。
三、安装和编译命令
# 切换目录mkdir -p /data/sysbench && cd /data/sysbench# 安装编译插件和库包yum install make automake libtool pkgconfig libaio-devel postgresql-devel# 获取源码wget -c https://github.com/akopytov/sysbench/archive/1.0.12.zip# 解压并进行编译unzip 1.0.12.zip && cd sysbench-1.0.12./autogen.sh./configure –with-pgsql –without-mysqlmakemake install# 编译安装完成后,sysbench 工具所在目录ls /usr/local/bin/sysbench
四、压力测试参数说明
–test: 压力测试使用的 Lua 模型场景文件–db-driver: 指定数据库类型–pgsql-db: 压力测试操作的数据库名–pgsql-user: 连接数据库的用户名–pgsql-password: 连接数据库的密码–pgsql-host: 主 CN 的 IP–pgsql-port: 主 CN 的数据库端口–oltp-tables-count: 压力测试的数据库表数量–oltp-tables-size: 压力测试单表的数据量–num-threads: 压力测试的并发线程数–max-time: 压力测试时间,取值为0,表示不限时间,单位为秒–max-requests: 压力请求数量,取值为0,表示不限请求数量,单位为单次 Lua 场景请求数–report-interval: 压测报告输出周期,单位为秒–force-shutdown: 压力完成后是否强制终止测试
五、测试指标
·TPS:Transaction Per Second,数据库每秒执行的事务数,每个事务中包含18条 SQL 语句。
·QPS:Query Per Second,数据库每秒执行的 SQL 数。
六、表结构
CREATE TABLE `sbtest` ( `id` INTEGER IDENTITY(1,1) NOT NULL, `k` INTEGER DEFAULT '0' NOT NULL, `c` CHAR(120) DEFAULT '' NOT NULL, `pad` CHAR(60) DEFAULT '' NOT NULL, PRIMARY KEY (`id`) )
七、OLTP 压力场景
Sysbench 中 OLTP 场景的事务中包含18条 SQL,具体执行的语句如下:
·主键 SELECT 语句,包含10条:
SELECT c FROM ${rand_table_name} where id=${rand_id};
·范围 SELECT 语句, 包含4条:
SELECT c FROM ${rand_table_name} WHERE id BETWEEN ${rand_id_start} AND ${rand_id_end};SELECT SUM(K) FROM ${rand_table_name} WHERE id BETWEEN ${rand_id_start} AND ${rand_id_end};SELECT c FROM ${rand_table_name} WHERE id BETWEEN ${rand_id_start} AND ${rand_id_end} ORDER BY c;SELECT DISTINCT c FROM ${rand_table_name} WHERE id BETWEEN ${rand_id_start} AND ${rand_id_end} ORDER BY c;
·UPDATE 语句,包含2条:
UPDATE ${rand_table_name} SET k=k+1 WHERE id=${rand_id}UPDATE ${rand_table_name} SET c=${rand_str} WHERE id=${rand_id}
·DELETE 语句,包含1条:
DELETE FROM ${rand_table_name} WHERE id=${rand_id}
·INSERT 语句,包含1条:
INSERT INTO ${rand_table_name} (id, k, c, pad) VALUES (${rand_id},${rand_k},${rand_str_c},${rand_str_pad})
八、SELECT 压力场景
·主键 SELECT 语句
SELECT c FROM ${rand_table_name} where id=${rand_id};
九、测试步骤
测试过程中,请根据实例的配置修改 CN IP [host]、CN Port [port]、用户名 [user] 和 密码 [password]。
1. 导入数据。
1. 创建数据库 loadtest:
psql -h $host -p [host] -U [user] postgres -c "create database loadtest"
2. 使用 Sysbench 工具构造压测数据到 loadtest 库中,根据不同的实例规格场景修改背景数据量:
sysbench –test=./tests/include/oltp_legacy/oltp.lua –db-driver=pgsql –pgsql-db=loadtest –pgsql-user=[user] –pgsql-password=[password] –pgsql-port=[port] –pgsql-host=[host] –oltp-tables-count=20 –oltp-table-size=2000000 –num-threads=20 prepare
3. 压力测试,根据不同的实例规格场景修改压测参数。
sysbench –test=./tests/include/oltp_legacy/oltp.lua –db-driver=pgsql –pgsql-db=loadtest –pgsql-user=[user] –pgsql-password=[password] –pgsql-port=[port] –pgsql-host=[host] –oltp-tables-count=20 –oltp-table-size=2000000 –max-time=3600 –max-requests=0 –num-threads=150 –report-interval=3 –forced-shutdown=1 run
4. 清理数据,压力测试完成后,清理压力数据。
sysbench –test=./tests/include/oltp_legacy/oltp.lua –db-driver=pgsql –pgsql-db=loadtest –pgsql-user=[user] –pgsql-password=[password] –pgsql-port=[port] –pgsql-host=[host] –oltp-tables-count=20 –oltp-table-size=2000000 –max-time=3600 –max-requests=0 –num-threads=20 –report-interval=3 –forced-shutdown=1 cleanup