PostgreSQL码农集散地

探索PolarDB开源版的性能测试之旅

作者:Digital Observer(施嘉伟)

Oracle ACE Pro: Database

PostgreSQL ACE Partner

11年数据库行业经验,现主要从事数据库服务工作

拥有Oracle OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、OCI、PolarDB技术专家、达梦师资认证、数据安全咨询高级等认证

ITPUB认证专家、PolarDB开源社区技术顾问、HaloDB技术顾问、TiDB社区技术布道师、国内某高校企业实践指导教师

公众号:Digital Observer;CSDN:施嘉伟;ITPUB:sjw1933;PGFans:施嘉伟。

碰壁

 笔者曾在《国产数据库是否能扛住压力》的公众号文章中,使用Sysbench对数据库进行了压力测试。后来,我尝试将同样的步骤应用到PolarDB开源数据库上,想要依样画葫芦地进行测试。然而,结果不如人意——我失败了。

原文链接:

国产数据库能否扛住压力—HaloDB压力测试

环境说明

ACADEMIC

PRESENTATIONS

操作系统版本CentOS Linux release 7.6
Docker版本24.0.2
数据库版本PostgreSQL 11.9 (POLARDB 11.9)
实验平台云起实验室
开始实验

ACADEMIC

PRESENTATIONS

实验环境polardb已经封装在Docker中,快速创建容器:

docker run -it --rm polardb/polardb_pg_local_instance psql
01
进入Docker环境
[root@iZuf63m6xf7bonb2a82rr4Z ~]# docker ps
CONTAINER ID   IMAGE                               COMMAND                  CREATED          STATUS          PORTS     NAMES
39974bfdee64   polardb/polardb_pg_local_instance   "./docker-entrypoint…"   36 minutes ago   Up 36 minutes             nervous_wozniak
[root@iZuf63m6xf7bonb2a82rr4Z ~]# docker exec -it 39974bfdee64 /bin/bash
postgres@39974bfdee64:~$ sudo su - root
root@39974bfdee64:~#
root@39974bfdee64:/etc# more /etc/debian_version 
bookworm/sid
02
安装Sysbench

进入Docker环境我们发现操作系统是Debian

快速安装SysBench的方法如下:

curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash
sudo apt -y install sysbench
03
测试方法

首先创建一个数据库,例如test:

docker exec -it 39974bfdee64 /bin/bash
postgres@39974bfdee64:~$ psql
psql (11.9)
Type "help" for help.

postgres=# create database test;
CREATE DATABASE

参数说明
参数说明
--pgsql-passwordPolarDB 用户密码。
--pgsql-portPolarDB 端口。
--pgsql-userPolarDB 用户名。
--pgsql-hostPolarDB 地址。

测试PolarDB PostgreSQL版的写场景性能。

## 准备数据
sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_read_only prepare

## 运行 oltp_insert 测试
sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_insert run

## 运行 oltp_update_index 测试
sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_update_index run

## 运行 oltp_update_non_index 测试
sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_update_non_index run

## 运行 oltp_write_only 测试
sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_write_only run

使用SysBench测试PolarDB PostgreSQL版的读场景性能。

## 准备数据
sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_read_only prepare

## 运行 oltp_point_select
sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_point_select run

## 运行 oltp_read_only
sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_read_only run

使用SysBench测试PolarDB PostgreSQL版的读写混合场景性能。

## 准备数据
sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_read_only prepare

## 运行 oltp_read_write
sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_read_write run

04
测试样例
## 准备数据
postgres@39974bfdee64:~$ sysbench --pgsql-password=postgres --pgsql-port=5432 --report-interval='1' --pgsql-host=127.0.0.1 --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='2' --table-size='50000' --time='60' --pgsql-user=postgres --rand-type='uniform' --pgsql-db=test oltp_read_only prepare
## 运行 oltp_insert 测试
postgres@39974bfdee64:~$ sysbench --pgsql-password=postgres --pgsql-port=5432 --report-interval='1' --pgsql-host=127.0.0.1 --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='2' --table-size='50000' --time='60' --pgsql-user=postgres --rand-type='uniform' --pgsql-db=test oltp_insert run
Image
Image
总结

     在数据库性能测试工具Sysbench的部署过程中,不同操作系统版本之间存在一些细微差异。如果不仔细阅读相关说明,很容易导致部署过程中的问题。我之前没有按照官方文档的建议进行操作,结果走了不少弯路。

     此外,各个数据库厂商在官方文档中提供了与Sysbench配合使用的具体测试说明。这些说明通常针对特定的数据库版本和操作系统环境,提供了最佳实践和常见问题的解决方案。忽略这些文档可能会导致测试结果不准确,甚至可能得出误导性的结论。

     总结来说,在Sysbench的部署过程中,一定要仔细阅读并遵循官方文档的说明,尤其是针对不同操作系统版本的差异化配置建议。这样可以避免不必要的麻烦,提高部署效率,并确保测试结果的准确性。

参考文档:https://help.aliyun.com/zh/polardb/polardb-for-postgresql/oltp-performance-test-1?spm=a2c4g.11186623.0.i0

Image
大佬新书推荐
Image
END

往期推荐:

师傅,为什么我找不到pg数据库日志?
探索Klustron数据库:高性能分布式新选择?
初探PolarDB for PostgreSQL开源数据库
国产数据库能否扛住压力—HaloDB压力测试
半年度总结:技术路上的光芒

在看点这里

Image

点击"阅读原文"