本文介绍测试RDS PPAS实例性能的步骤。
- 在测试前需要提交工单申请,修改PPAS实例参数,本文以PPAS 10版本为例,需要修改主备实例上的postgresql.auto.conf文件。 12345678910111213141516171819202122232425262728293031323334353637
edb_redwood_date = on
edb_redwood_greatest_least = on
edb_redwood_strings = on
edb_redwood_raw_names = on
edb_stmt_level_tx = off
db_dialect =
'redwood'
optimizer_mode = choose
edb_early_lock_release = on
datestyle =
'iso, ymd'
default_with_oids = off
default_with_rowids = off
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
当前PPAS实例的规格内存
min_wal_size = 16GB #
1
/
8
当前PPAS实例的规格内存
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
- 修改配置后,重启PPAS实例让配置生效。
- 根据目标库大小初始化测试数据,具体命令如下:
- 初始化数据50亿:
pgbench -i -s 50000
- 初始化数据10亿:
pgbench -i -s 10000
- 初始化数据5亿:
pgbench -i -s 5000
- 初始化数据1亿:
pgbench -i -s 1000
- 初始化数据50亿:
- 通过以下命令配置环境变量: 12345
export PGHOST=<PPAS实例内网地址>
export PGPORT=<PPAS实例端口>
export PGDATABASE=postgres
export PGUSER=<PPAS数据库用户名>
export PGPASSWORD=<PPAS对应用户的密码>
- 创建只读和读写的测试脚本。
- 创建只读脚本ro.sql内容如下: 12
\set aid random_gaussian(
1
, :range,
10.0
)
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
- 创建读写脚本rw.sql内容如下: 1234567891011
\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内容如下:
- 使用如下命令测试:
- 只读测试: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
rds.ppas.st.h43,总数据量
50
亿,热数据
1
亿
pgbench -M prepared -v -r -P
1
-f ./ro.sql -c
480
-j
480
-T
120
-D scale=
50000
-D range=
100000000
rds.ppas.st.h43,总数据量
50
亿,热数据
5
亿
pgbench -M prepared -v -r -P
1
-f ./ro.sql -c
480
-j
480
-T
120
-D scale=
50000
-D range=
500000000
rds.ppas.st.h43,总数据量
50
亿,热数据
10
亿
pgbench -M prepared -v -r -P
1
-f ./ro.sql -c
480
-j
480
-T
120
-D scale=
50000
-D range=
1000000000
rds.ppas.st.h43,总数据量
50
亿,热数据
50
亿
pgbench -M prepared -v -r -P
1
-f ./ro.sql -c
480
-j
480
-T
120
-D scale=
50000
-D range=
5000000000
ppas.x8.4xlarge.
2
,总数据量
10
亿,热数据
1
亿
pgbench -M prepared -v -r -P
1
-f ./ro.sql -c
320
-j
320
-T
120
-D scale=
10000
-D range=
100000000
ppas.x8.4xlarge.
2
,总数据量
10
亿,热数据
5
亿
pgbench -M prepared -v -r -P
1
-f ./ro.sql -c
320
-j
320
-T
120
-D scale=
10000
-D range=
500000000
ppas.x8.4xlarge.
2
,总数据量
10
亿,热数据
10
亿
pgbench -M prepared -v -r -P
1
-f ./ro.sql -c
320
-j
320
-T
120
-D scale=
10000
-D range=
1000000000
ppas.x4.4xlarge.
2
,总数据量
10
亿,热数据
1
亿
pgbench -M prepared -v -r -P
1
-f ./ro.sql -c
320
-j
320
-T
120
-D scale=
10000
-D range=
100000000
ppas.x4.4xlarge.
2
,总数据量
10
亿,热数据
5
亿
pgbench -M prepared -v -r -P
1
-f ./ro.sql -c
320
-j
320
-T
120
-D scale=
10000
-D range=
500000000
ppas.x4.4xlarge.
2
,总数据量
10
亿,热数据
10
亿
pgbench -M prepared -v -r -P
1
-f ./ro.sql -c
320
-j
320
-T
120
-D scale=
10000
-D range=
1000000000
ppas.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
ppas.x8.2xlarge.
2
,总数据量
10
亿,热数据
5
亿
pgbench -M prepared -v -r -P
1
-f ./ro.sql -c
64
-j
64
-T
120
-D scale=
10000
-D range=
500000000
ppas.x8.2xlarge.
2
,总数据量
10
亿,热数据
10
亿
pgbench -M prepared -v -r -P
1
-f ./ro.sql -c
64
-j
64
-T
120
-D scale=
10000
-D range=
1000000000
ppas.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
ppas.x8.xlarge.
2
,总数据量
10
亿,热数据
5
亿
pgbench -M prepared -v -r -P
1
-f ./ro.sql -c
32
-j
32
-T
120
-D scale=
10000
-D range=
500000000
ppas.x8.xlarge.
2
,总数据量
10
亿,热数据
10
亿
pgbench -M prepared -v -r -P
1
-f ./ro.sql -c
32
-j
32
-T
120
-D scale=
10000
-D range=
1000000000
ppas.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
ppas.x8.large.
2
,总数据量
5
亿,热数据
5
亿
pgbench -M prepared -v -r -P
1
-f ./ro.sql -c
16
-j
16
-T
120
-D scale=
5000
-D range=
500000000
- 读写测试: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
rds.ppas.st.h43,总数据量
50
亿,热数据
1
亿
pgbench -M prepared -v -r -P
1
-f ./rw.sql -c
480
-j
480
-T
120
-D scale=
50000
-D range=
100000000
rds.ppas.st.h43,总数据量
50
亿,热数据
5
亿
pgbench -M prepared -v -r -P
1
-f ./rw.sql -c
480
-j
480
-T
120
-D scale=
50000
-D range=
500000000
rds.ppas.st.h43,总数据量
50
亿,热数据
10
亿
pgbench -M prepared -v -r -P
1
-f ./rw.sql -c
480
-j
480
-T
120
-D scale=
50000
-D range=
1000000000
rds.ppas.st.h43,总数据量
50
亿,热数据
50
亿
pgbench -M prepared -v -r -P
1
-f ./rw.sql -c
480
-j
480
-T
120
-D scale=
50000
-D range=
5000000000
ppas.x8.4xlarge.
2
,总数据量
10
亿,热数据
1
亿
pgbench -M prepared -v -r -P
1
-f ./rw.sql -c
320
-j
320
-T
120
-D scale=
10000
-D range=
100000000
ppas.x8.4xlarge.
2
,总数据量
10
亿,热数据
5
亿
pgbench -M prepared -v -r -P
1
-f ./rw.sql -c
320
-j
320
-T
120
-D scale=
10000
-D range=
500000000
ppas.x8.4xlarge.
2
,总数据量
10
亿,热数据
10
亿
pgbench -M prepared -v -r -P
1
-f ./rw.sql -c
320
-j
320
-T
120
-D scale=
10000
-D range=
1000000000
ppas.x4.4xlarge.
2
,总数据量
10
亿,热数据
1
亿
pgbench -M prepared -v -r -P
1
-f ./rw.sql -c
320
-j
320
-T
120
-D scale=
10000
-D range=
100000000
ppas.x4.4xlarge.
2
,总数据量
10
亿,热数据
5
亿
pgbench -M prepared -v -r -P
1
-f ./rw.sql -c
320
-j
320
-T
120
-D scale=
10000
-D range=
500000000
ppas.x4.4xlarge.
2
,总数据量
10
亿,热数据
10
亿
pgbench -M prepared -v -r -P
1
-f ./rw.sql -c
320
-j
320
-T
120
-D scale=
10000
-D range=
1000000000
ppas.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
ppas.x8.2xlarge.
2
,总数据量
10
亿,热数据
5
亿
pgbench -M prepared -v -r -P
1
-f ./rw.sql -c
64
-j
64
-T
120
-D scale=
10000
-D range=
500000000
ppas.x8.2xlarge.
2
,总数据量
10
亿,热数据
10
亿
pgbench -M prepared -v -r -P
1
-f ./rw.sql -c
64
-j
64
-T
120
-D scale=
10000
-D range=
1000000000
ppas.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
ppas.x8.xlarge.
2
,总数据量
10
亿,热数据
5
亿
pgbench -M prepared -v -r -P
1
-f ./rw.sql -c
32
-j
32
-T
120
-D scale=
10000
-D range=
500000000
ppas.x8.xlarge.
2
,总数据量
10
亿,热数据
10
亿
pgbench -M prepared -v -r -P
1
-f ./rw.sql -c
32
-j
32
-T
120
-D scale=
10000
-D range=
1000000000
ppas.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
ppas.x8.large.
2
,总数据量
5
亿,热数据
5
亿
pgbench -M prepared -v -r -P
1
-f ./rw.sql -c
16
-j
16
-T
120
-D scale=
5000
-D range=
500000000
说明- scale乘以10万:表示测试数据量。
- range:表示活跃数据量。
- -c:表示测试连接数,测试连接数不代表该规格的最大连接数,最大连接数请参见主实例规格列表。
- 只读测试: