PostgreSQL on ECS 横向版本TPCB性能测试

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 本文对比的是PostgreSQL 9.4, 9.5, 9.6, 以及某基于9.4的国产数据库在ECS上的性能。 硬件环境和搭配 Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz 32核 128G 内存 500G 高效本地SSD , 15000

本文对比的是PostgreSQL 9.4, 9.5, 9.6, 以及某基于9.4的国产数据库在ECS上的性能。

硬件环境和搭配

Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz
32核
128G 内存
500G 高效本地SSD  ,  15000 IOPS  ,  $PGDATA
700G * 2 高效SSD云盘  ,  20000 IOPS  ,  tbs1, tbs2

测试模型 TPCB
分别测试的数据量 10万乘以 1 10 100 500 1000 5000 10000
分别测试的并发数 1 2 4 8 16 32 64 128 256 512

环境部署

parted /dev/vdc
(parted) mklabel gpt
(parted) mkpart primary 1M 2049M
(parted) mkpart primary 2049M 710G
(parted) select /dev/vdb
Using /dev/vdb
(parted) rm 1         
(parted) mkpart primary 1M 2049M 
(parted) mkpart primary 2049M 710G
q

partx -a /dev/vdc
kpartx -a /dev/vdc
partprobe  /dev/vdc
partx -a /dev/vdb
kpartx -a /dev/vdb
partprobe  /dev/vdb

dmsetup remove vdc1
dmsetup remove vdc2

dmsetup remove vdb1
dmsetup remove vdb2

mkfs.xfs -f -b size=4096 -l logdev=/dev/vdc1,size=2047868928,sunit=16 -d agsize=134217728 /dev/vdc2
mkfs.xfs -f -b size=4096 -l logdev=/dev/vdb1,size=2047868928,sunit=16 -d agsize=134217728 /dev/vdb2

vi /etc/fstab
/dev/vdc2 /data02 xfs defaults,allocsize=16M,inode64,nobarrier,nolargeio,logbsize=262144,noatime,nodiratime,swalloc,logdev=/dev/vdc1 0 0
/dev/vdb2 /data01 xfs defaults,allocsize=16M,inode64,nobarrier,nolargeio,logbsize=262144,noatime,nodiratime,swalloc,logdev=/dev/vdb1 0 0


mkdir /data01
mkdir /data02
mkdir /data03

mount -a

mkdir -p /data01/pgdata
mkdir -p /data02/pgdata
mkdir -p /data03/pgdata
chown -R digoal:digoal /data*/*

还需要调整一些内核参数,LIMITS,本文略 .   

表空间目录

mkdir /data01/pgdata/9.4_tbs
mkdir /data02/pgdata/9.4_tbs
mkdir /data01/pgdata/9.5_tbs
mkdir /data02/pgdata/9.5_tbs
mkdir /data01/pgdata/9.6_tbs
mkdir /data02/pgdata/9.6_tbs
mkdir /data01/pgdata/sgrds_tbs
mkdir /data02/pgdata/sgrds_tbs
chown -R digoal:digoal /data*/*

配置环境变量

# vi env.sh  


#!/bin/bash 

if [ $# -ne 2 ]; then
  echo "$0 ver port"
else

export PS1="$USER@`/bin/hostname -s`-> "
export PGPORT=$2
export PGDATA=/data03/pgdata/pg_root$1
export LANG=en_US.utf8
export PGHOME=/home/digoal/pgsql$1
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
export DATE=`date +"%Y%m%d%H%M"`
export PATH=$PGHOME/bin:$PATH:.
export MANPATH=$PGHOME/share/man:$MANPATH
export PGHOST=$PGDATA
export PGUSER=postgres
export PGDATABASE=postgres
alias rm='rm -i'
alias ll='ls -lh'
unalias vi

fi

初始化数据库集群

. ./env.sh 9.4 1920
initdb -D $PGDATA -E UTF8 --locale=C -U postgres

. ./env.sh 9.5 1921
initdb -D $PGDATA -E UTF8 --locale=C -U postgres

. ./env.sh 9.6 1922
initdb -D $PGDATA -E UTF8 --locale=C -U postgres

. ./env.sh sgrds 1923
initdb -D $PGDATA -E UTF8 --locale=C -U postgres

启动数据库

. ./env.sh 9.4 1920
pg_ctl stop -m fast
. ./env.sh 9.5 1921
pg_ctl stop -m fast
. ./env.sh 9.6 1922
pg_ctl stop -m fast
. ./env.sh sgrds 1923
pg_ctl stop -m fast


. ./env.sh 9.4 1920
nohup postgres -B 16GB \
-c port=$PGPORT \
-c max_connections=700 \
-c unix_socket_directories='.' \
-c listen_addresses='0.0.0.0' \
-c vacuum_cost_delay=0 \
-c vacuum_cost_limit=10000 \
-c bgwriter_delay=10ms \
-c bgwriter_lru_maxpages=1000 \
-c bgwriter_lru_multiplier=10.0 \
-c synchronous_commit=off \
-c full_page_writes=off \
-c wal_buffers=1900MB \
-c wal_writer_delay=10ms \
-c checkpoint_timeout=35min \
-c checkpoint_segments=1024 \
-c checkpoint_completion_target=0.9 \
-c random_page_cost=1.1 \
-c effective_cache_size=64GB \
-c log_destination='csvlog' \
-c logging_collector=on \
-c log_truncate_on_rotation=on \
-D $PGDATA \
>/dev/null 2>&1 &
sleep 2
psql -c "create tablespace tbs1 location '/data01/pgdata/$PGPORT_tbs';"
psql -c "create tablespace tbs2 location '/data02/pgdata/$PGPORT_tbs';"



. ./env.sh 9.5 1921
nohup postgres -B 16GB \
-c port=$PGPORT \
-c max_connections=700 \
-c unix_socket_directories='.' \
-c listen_addresses='0.0.0.0' \
-c vacuum_cost_delay=0 \
-c vacuum_cost_limit=10000 \
-c bgwriter_delay=10ms \
-c bgwriter_lru_maxpages=1000 \
-c bgwriter_lru_multiplier=10.0 \
-c synchronous_commit=off \
-c full_page_writes=off \
-c wal_buffers=1900MB \
-c wal_writer_delay=10ms \
-c checkpoint_timeout=35min \
-c max_wal_size=16GB \
-c checkpoint_completion_target=0.9 \
-c random_page_cost=1.1 \
-c effective_cache_size=64GB \
-c log_destination='csvlog' \
-c logging_collector=on \
-c log_truncate_on_rotation=on \
-D $PGDATA \
>/dev/null 2>&1 &
sleep 2
psql -c "create tablespace tbs1 location '/data01/pgdata/$PGPORT_tbs';"
psql -c "create tablespace tbs2 location '/data02/pgdata/$PGPORT_tbs';"


. ./env.sh 9.6 1922
nohup postgres -B 16GB \
-p $PGPORT \
-N 700 \
-c unix_socket_directories='.' \
-c listen_addresses='0.0.0.0' \
-c vacuum_cost_delay=0 \
-c vacuum_cost_limit=10000 \
-c bgwriter_delay=10ms \
-c bgwriter_lru_maxpages=1000 \
-c bgwriter_lru_multiplier=10.0 \
-c synchronous_commit=off \
-c wal_writer_flush_after=0 \
-c full_page_writes=off \
-c wal_buffers=1900MB \
-c wal_writer_delay=10ms \
-c checkpoint_timeout=35min \
-c max_wal_size=16GB \
-c checkpoint_completion_target=0.9 \
-c random_page_cost=1.1 \
-c effective_cache_size=64GB \
-c log_destination='csvlog' \
-c logging_collector=on \
-c log_truncate_on_rotation=on \
-D $PGDATA \
>/dev/null 2>&1 &
sleep 2
psql -c "create tablespace tbs1 location '/data01/pgdata/$PGPORT_tbs';"
psql -c "create tablespace tbs2 location '/data02/pgdata/$PGPORT_tbs';"


. ./env.sh sgrds 1923
nohup postgres -B 16GB \
-c port=$PGPORT \
-c max_connections=700 \
-c unix_socket_directories='.' \
-c listen_addresses='0.0.0.0' \
-c vacuum_cost_delay=0 \
-c vacuum_cost_limit=10000 \
-c bgwriter_delay=10ms \
-c bgwriter_lru_maxpages=1000 \
-c bgwriter_lru_multiplier=10.0 \
-c synchronous_commit=off \
-c full_page_writes=off \
-c wal_buffers=1900MB \
-c wal_writer_delay=10ms \
-c checkpoint_timeout=35min \
-c checkpoint_segments=1024 \
-c checkpoint_completion_target=0.9 \
-c random_page_cost=1.1 \
-c effective_cache_size=64GB \
-c log_destination='csvlog' \
-c logging_collector=on \
-c log_truncate_on_rotation=on \
-D $PGDATA \
>/dev/null 2>&1 &
sleep 2
psql -c "create tablespace tbs1 location '/data01/pgdata/$PGPORT_tbs';"
psql -c "create tablespace tbs2 location '/data02/pgdata/$PGPORT_tbs';"

测试脚本

# vi test.sh
#!/bin/bash

for s in 1 10 100 500 1000 5000 10000
do

################
. ~/env.sh 9.4 1920
pgbench -i -s $s --tablespace=tbs1 --index-tablespace=tbs2 --unlogged-tables

for i in 1 2 4 8 16 32 64 128 256 512
do
if [ $i -ge 16 ]; then
  j=16
else
  j=i
fi
pgbench -M prepared -n -r -c $i -j $i -T 120 > ./9.4.s_$s.i_$i.log 2>&1
done
pgbench -i -s 1
#################

################
. ~/env.sh 9.5 1921
pgbench -i -s $s --tablespace=tbs1 --index-tablespace=tbs2 --unlogged-tables

for i in 1 2 4 8 16 32 64 128 256 512
do
if [ $i -ge 16 ]; then
  j=16
else
  j=i
fi
pgbench -M prepared -n -r -c $i -j $i -T 120 > ./9.5.s_$s.i_$i.log 2>&1
done
pgbench -i -s 1
#################

################
. ~/env.sh 9.6 1922
pgbench -i -s $s --tablespace=tbs1 --index-tablespace=tbs2 --unlogged-tables

for i in 1 2 4 8 16 32 64 128 256 512
do
if [ $i -ge 16 ]; then
  j=16
else
  j=i
fi
pgbench -M prepared -n -r -c $i -j $i -T 120 > ./9.6.s_$s.i_$i.log 2>&1
done
pgbench -i -s 1
#################

################
. ~/env.sh sgrds 1923
pgbench -i -s $s --tablespace=tbs1 --index-tablespace=tbs2 --unlogged-tables

for i in 1 2 4 8 16 32 64 128 256 512
do
if [ $i -ge 16 ]; then
  j=16
else
  j=i
fi
pgbench -M prepared -n -r -c $i -j $i -T 120 > ./sgrds.s_$s.i_$i.log 2>&1
done
pgbench -i -s 1
#################

done

测试

chmod 500 test.sh
nohup ./test.sh >/dev/null 2>&1 &

测试结果

# vi result.sh

for s in 1 10 100 500 1000 5000 10000 
do

echo "9.4 s $s"
for i in 1 2 4 8 16 32 64 128 256 512
do 
cat 9.4.s_$s.i_$i.log | grep including | awk '{print $3}'
done

echo "9.5 s $s"
for i in 1 2 4 8 16 32 64 128 256 512
do 
cat 9.5.s_$s.i_$i.log | grep including | awk '{print $3}'
done

echo "9.6 s $s"
for i in 1 2 4 8 16 32 64 128 256 512
do 
cat 9.6.s_$s.i_$i.log | grep including | awk '{print $3}'
done

echo "sgrds s $s"
for i in 1 2 4 8 16 32 64 128 256 512
do 
cat sgrds.s_$s.i_$i.log | grep including | awk '{print $3}'
done

done


. ./result.sh

瓶颈分析请结合压测过程中的主机资源开销(io,cpu,调用,内存,网络等)和PROFILE来判断。
数据量小的时候,高并发的情况下行级锁等待较多,因为数据量少,高并发的UPDATE的原因。
1
2
3
4
5
6

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
10月前
|
安全 Linux 虚拟化
|
10月前
|
运维 Prometheus 监控
如何在测试环境中保持操作系统、浏览器版本和服务器配置的稳定性和一致性?
如何在测试环境中保持操作系统、浏览器版本和服务器配置的稳定性和一致性?
|
8月前
|
弹性计算 Ubuntu Java
OS-Copilot-ubuntu镜像版本的具体测试使用(安装方式有单独注明)
作为一名个人开发者,我主要负责云资源的运维和管理。在使用OS Copilot的过程中,我遇到了一些配置问题,特别是在ECS实例中设置AccessKey时,但最终成功解决了。通过使用OS Copilot的-t/-f/管道功能,我大大提升了效率,减少了命令编写的工作量,特别是在搭建Java运行环境时效果显著。此外,| 功能帮助我快速理解文档,整体体验非常流畅,推荐给其他开发者使用。
194 6
|
11月前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
509 1
|
11月前
|
弹性计算 安全 Linux
阿里云国际版使用ping命令测试ECS云服务器不通的排查方法
阿里云国际版使用ping命令测试ECS云服务器不通的排查方法
|
11月前
|
机器学习/深度学习 算法 PyTorch
目标检测实战(五): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-7.0版本进行目标检测的完整流程,包括算法介绍、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。YOLOv5以其高精度、快速度和模型小尺寸在计算机视觉领域受到广泛应用。
5040 0
目标检测实战(五): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程)
|
弹性计算 Prometheus Cloud Native
SLS Prometheus存储问题之Union MetricStore在性能测试中是如何设置测试环境的
SLS Prometheus存储问题之Union MetricStore在性能测试中是如何设置测试环境的
|
关系型数据库 MySQL 测试技术
数据库升级是一个涉及数据备份、新版本安装、数据迁移和测试等关键环节的复杂过程
【7月更文挑战第21天】数据库升级是一个涉及数据备份、新版本安装、数据迁移和测试等关键环节的复杂过程
315 1
|
Web App开发 IDE Java
自动化测试谷歌浏览器和其驱动版本差不多却还是报错The chromedriver version (121.0.6167.184) detected in PATH at DPythonchromed
自动化测试谷歌浏览器和其驱动版本差不多却还是报错The chromedriver version (121.0.6167.184) detected in PATH at DPythonchromed
274 2
|
Java 测试技术 数据库
【单文件版本】java SpringBoot 切换不同的运行环境(生产环境、开发环境、测试环境)SpringBoot配置多个不同运营环境
【单文件版本】java SpringBoot 切换不同的运行环境(生产环境、开发环境、测试环境)SpringBoot配置多个不同运营环境
136 0

相关产品

  • 云原生数据库 PolarDB
  • 云数据库 RDS PostgreSQL 版
  • 推荐镜像

    更多