文档首页 > > 性能白皮书> PostgreSQL> 测试方法

测试方法

分享
更新时间: 2020/03/27 GMT+08:00

PostgreSQL是一个开源对象关系型数据库管理系统,并侧重于可扩展性和标准的符合性,被业界誉为“最先进的开源数据库”。PostgreSQL面向企业复杂SQL处理的OLTP在线事务处理场景,支持NoSQL数据类型(JSON/XML/hstore),支持GIS地理信息处理,在可靠性、数据完整性方面有良好声誉,适用于互联网网站、位置应用系统、复杂数据对象处理等应用场景。

  • 支持postgis插件,空间应用卓越,达到国际标准。更接近Oracle数据库,去 “O” 成本低。
  • 适用场景丰富,费用低,随时可以根据业务情况弹性伸缩所需的资源,按需开支,量身订做。

测试环境

  • 区域:华北-北京一。
  • 可用分区:可用区1。
  • 弹性云服务器(Elastic Cloud Server,简称ECS):规格选择通用计算型c3.2xlarge.2,8U16GB,操作系统镜像使用CentOS7.4 64位版本,详见图1。由于压测工具需要安装额外的编译工具,建议ECS绑定弹性IP。
    图1 ECS配置

测试工具

Sysbench是一款基于LuaJIT的,模块化多线程基准测试工具,常用于数据库基准测试。通过内置的数据库测试模型,采用多线程并发操作来评估数据库的性能。了解Sysbench更多详情,请访问https://github.com/akopytov/sysbench

本次测试使用的Sysbench版本为1.0.12,具体的安装命令如下:

#wget -c https://github.com/akopytov/sysbench/archive/1.0.12.zip

#yum install make automake libtool pkgconfig libaio-devel postgresql-devel

#unzip 1.0.12.zip

#cd sysbench-1.0.12

#./autogen.sh

#./configure --with-pgsql --without-mysql

#make

#make install

测试步骤

请根据实际信息,替换数据库、连接IP与用户密码。

  1. 导入数据。

    1. 使用如下命令登录数据库,并创建测试数据库“loadtest”

      psql -h<host> -p5432 "dbname=postgres user=root password=<password>" <<TEST

      create database loadtest;

      TEST

    2. 使用sysbench命令导入测试背景数据到“loadtest”数据库。

      sysbench --test=/usr/local/share/sysbench/tests/include/oltp_legacy/oltp.lua --db-driver=pgsql --pgsql-db=loadtest --pgsql-user=root --pgsql-password=<password> --pgsql-port=5432 --pgsql-host=<host> --oltp-tables-count=64 --oltp-table-size=10000000 --num-threads=20 prepare

  2. 压测数据。

    sysbench --test=/usr/local/share/sysbench/tests/include/oltp_legacy/oltp.lua --db-driver=pgsql --pgsql-db=loadtest --pgsql-user=root --pgsql-password=<password> --pgsql-port=5432 --pgsql-host=<host> --oltp-tables-count=64 --oltp-table-size=10000000 --max-time=3600 --max-requests=0 --num-threads=64 --report-interval=3 --forced-shutdown=1 run

  3. 清理数据。

    sysbench --test=/usr/local/share/sysbench/tests/include/oltp_legacy/oltp.lua --db-driver=pgsql --pgsql-db=loadtest --pgsql-user=root --pgsql-password=<password> --pgsql-port=5432 --pgsql-host=<host> --oltp-tables-count=64 --oltp-table-size=10000000 --max-time=3600 --max-requests=0 --num-threads=200 cleanup

测试模型

  1. 表结构

    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`)

    )

  2. 读写比
    Sysbench默认提交的事务中包含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})

测试指标

  • TPS:Transaction Per Second,数据库每秒执行的事务数,每个事务中包含18条SQL语句。
  • QPS:Query Per Second,数据库每秒执行的SQL数,包含insert、select、update、delete等。
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区