本文介绍测试RDS PostgreSQL实例性能的步骤。
- 在测试前需要提交工单申请,修改PostgreSQL实例参数,本文以PostgreSQL10.0 版本为例,需要修改主备实例上的postgresql.auto.conf文件。
vacuum_cost_delay = 0 bgwriter_delay = 10ms bgwriter_lru_maxpages = 1000 bgwriter_lru_multiplier = 10.0 effective_io_concurrency = 0 max_worker_processes = 128 max_parallel_workers_per_gather = 0 synchronous_commit = off wal_compression = on wal_writer_delay = 10ms wal_writer_flush_after = 1MB checkpoint_timeout = 30min max_wal_size = 64GB # 1/2 当前PG实例的规格内存 min_wal_size = 16GB # 1/8 当前PG实例的规格内存 checkpoint_completion_target = 0.2 hot_standby_feedback = off random_page_cost = 1.1 log_checkpoints = on log_statement = 'ddl' log_autovacuum_min_duration = 0 autovacuum_freeze_max_age = 1500000000 autovacuum_multixact_freeze_max_age = 1600000000 autovacuum_vacuum_cost_delay = 0ms vacuum_freeze_table_age = 1450000000 vacuum_multixact_freeze_table_age = 1450000000 log_min_duration_statement=5s
- 修改配置后,重启PostgreSQL实例让配置生效。
- 根据目标库大小初始化测试数据,具体命令如下:
- 初始化数据50亿:
pgbench -i -s 50000
- 初始化数据10亿:
pgbench -i -s 10000
- 初始化数据5亿:
pgbench -i -s 5000
- 初始化数据1亿:
pgbench -i -s 1000
- 初始化数据50亿:
- 通过以下命令配置环境变量:
export PGHOST=<PostgreSQL实例内网地址> export PGPORT=<PostgreSQL实例端口> export PGDATABASE=postgres export PGUSER=<PostgreSQL数据库用户名> export PGPASSWORD=<PostgreSQL对应用户的密码>
- 创建只读和读写的测试脚本。
- 创建只读脚本ro.sql内容如下:
\set aid random_gaussian(1, :range, 10.0) SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
- 创建读写脚本rw.sql内容如下:
\set aid random_gaussian(1, :range, 10.0) \set bid random(1, 1 * :scale) \set tid random(1, 10 * :scale) \set delta random(-5000, 5000) BEGIN; UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; SELECT abalance FROM pgbench_accounts WHERE aid = :aid; UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); END;
- 创建只读脚本ro.sql内容如下:
- 使用如下命令测试:
- 只读测试:
rds.pg.st.h43,总数据量50亿,热数据1亿 pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 240 -j 240 -T 120 -D scale=50000 -D range=100000000 rds.pg.st.h43,总数据量50亿,热数据5亿 pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 240 -j 240 -T 120 -D scale=50000 -D range=500000000 rds.pg.st.h43,总数据量50亿,热数据10亿 pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 240 -j 240 -T 120 -D scale=50000 -D range=1000000000 rds.pg.st.h43,总数据量50亿,热数据50亿 pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 240 -j 240 -T 120 -D scale=50000 -D range=5000000000 pg.x4.4xlarge.2,总数据量10亿,热数据1亿 pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=100000000 pg.x4.4xlarge.2,总数据量10亿,热数据5亿 pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=500000000 pg.x4.4xlarge.2,总数据量10亿,热数据10亿 pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=1000000000 pg.x8.2xlarge.2,总数据量10亿,热数据1亿 pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=100000000 pg.x8.2xlarge.2,总数据量10亿,热数据5亿 pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=500000000 pg.x8.2xlarge.2,总数据量10亿,热数据10亿 pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=1000000000 pg.x8.xlarge.2,总数据量10亿,热数据1亿 pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 32 -j 32 -T 120 -D scale=10000 -D range=100000000 pg.x8.xlarge.2,总数据量10亿,热数据5亿 pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 32 -j 32 -T 120 -D scale=10000 -D range=500000000 pg.x8.xlarge.2,总数据量10亿,热数据10亿 pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 32 -j 32 -T 120 -D scale=10000 -D range=1000000000 pg.x8.large.2,总数据量5亿,热数据1亿 pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 16 -j 16 -T 120 -D scale=5000 -D range=100000000 pg.x8.large.2,总数据量5亿,热数据5亿 pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 16 -j 16 -T 120 -D scale=5000 -D range=500000000 pg.x8.medium.2,总数据量1亿,热数据5000万 pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 8 -j 8 -T 120 -D scale=1000 -D range=50000000 pg.x8.medium.2,总数据量1亿,热数据1亿 pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 8 -j 8 -T 120 -D scale=1000 -D range=100000000
- 读写测试:
rds.pg.st.h43,总数据量50亿,热数据1亿 pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 240 -j 240 -T 120 -D scale=50000 -D range=100000000 rds.pg.st.h43,总数据量50亿,热数据5亿 pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 240 -j 240 -T 120 -D scale=50000 -D range=500000000 rds.pg.st.h43,总数据量50亿,热数据10亿 pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 240 -j 240 -T 120 -D scale=50000 -D range=1000000000 rds.pg.st.h43,总数据量50亿,热数据50亿 pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 240 -j 240 -T 120 -D scale=50000 -D range=5000000000 pg.x4.4xlarge.2,总数据量10亿,热数据1亿 pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=100000000 pg.x4.4xlarge.2,总数据量10亿,热数据5亿 pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=500000000 pg.x4.4xlarge.2,总数据量10亿,热数据10亿 pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=1000000000 pg.x8.2xlarge.2,总数据量10亿,热数据1亿 pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=100000000 pg.x8.2xlarge.2,总数据量10亿,热数据5亿 pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=500000000 pg.x8.2xlarge.2,总数据量10亿,热数据10亿 pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=1000000000 pg.x8.xlarge.2,总数据量10亿,热数据1亿 pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 32 -j 32 -T 120 -D scale=10000 -D range=100000000 pg.x8.xlarge.2,总数据量10亿,热数据5亿 pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 32 -j 32 -T 120 -D scale=10000 -D range=500000000 pg.x8.xlarge.2,总数据量10亿,热数据10亿 pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 32 -j 32 -T 120 -D scale=10000 -D range=1000000000 pg.x8.large.2,总数据量5亿,热数据1亿 pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 16 -j 16 -T 120 -D scale=5000 -D range=100000000 pg.x8.large.2,总数据量5亿,热数据5亿 pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 16 -j 16 -T 120 -D scale=5000 -D range=500000000 pg.x8.medium.2,总数据量1亿,热数据5000万 pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 8 -j 8 -T 120 -D scale=1000 -D range=50000000 pg.x8.medium.2,总数据量1亿,热数据1亿 pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 8 -j 8 -T 120 -D scale=1000 -D range=100000000
说明- scale乘以10万:表示测试数据量。
- range:表示活跃数据量。
- -c:表示测试连接数,测试连接数不代表该规格的最大连接数,最大连接数请参见主实例规格列表。
- 只读测试: