云数据库 RDS 测试步骤

By | 2021年4月22日

本文介绍测试RDS PostgreSQL实例性能的步骤。

  1. 在测试前需要提交工单申请,修改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
  2. 修改配置后,重启PostgreSQL实例让配置生效。
  3. 根据目标库大小初始化测试数据,具体命令如下:
    • 初始化数据50亿:pgbench -i -s 50000
    • 初始化数据10亿:pgbench -i -s 10000
    • 初始化数据5亿:pgbench -i -s 5000
    • 初始化数据1亿:pgbench -i -s 1000
  4. 通过以下命令配置环境变量:
    export PGHOST=<PostgreSQL实例内网地址>
    export PGPORT=<PostgreSQL实例端口>
    export PGDATABASE=postgres
    export PGUSER=<PostgreSQL数据库用户名>
    export PGPASSWORD=<PostgreSQL对应用户的密码>
  5. 创建只读和读写的测试脚本。
    • 创建只读脚本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;
  6. 使用如下命令测试:
    • 只读测试:
      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:表示测试连接数,测试连接数不代表该规格的最大连接数,最大连接数请参见主实例规格列表

请关注公众号获取更多资料

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

云数据库 RDS 测试步骤

By | 2021年4月22日

在进行基于TPC-C模式的测试之前,请先完成如下操作步骤:

需要特别说明的是,这个测试建议在前30分钟到2小时之间取值,因为随着数据量的不断变化,TPC-C模式会出现性能瓶颈,后期需要为[dbo].[STOCK]、[dbo].[ORDER_LINE] 、[dbo].[ORDERS]这几张表增加Index才可以正常完成测试。

  1. 打开HammerDB

  2. 选择SQL SERVERTPC-C,如下图所示。

    测试步骤2

  3. 准备构建架构,如下图所示。

    测试步骤3

  4. 设置连接信息和初始化仓库(所有规格都设置为10)和并发用户数(根据压力调整以测试最佳性能),双击Schema Build/Option。如下图所示。

    说明:在测试RDS时,虽然有指定端口,还需要在SQL Server上指明端口号,例如:**.sqlserver.rds.aliyuncs.com,3433。

    测试步骤4

  5. 双击Schema Build/Build,如下图所示。

    测试步骤5

  6. 单击YES创建架构,如下图所示。

    测试步骤6

  7. 等待初始化架构完成,如下图所示。

    测试步骤7

  8. 当初始化都显示complete后,单击红色方框停止执行,如下图所示。

    测试步骤8

  9. 在左侧导航栏中选择Driver script/option,确保数据库连接信息正确。

    测试步骤9

  10. 在左侧导航栏中选择Driver script/load,如下图所示。

    测试步骤10

  11. 设置Virtual User参数,根据规格配置选择用户数,直到数据库被压出最高TPM。如下图所示。

    说明:建议不要选择Show Output这个选项,可能会导致客户端无响应。

    测试步骤11

  12. 在左侧导航栏中选择Virtual User/Create,如下图所示。

    测试步骤12

  13. 在左侧导航栏中选择Transcations/Option,如下图所示。

    测试步骤13

  14. 在左侧导航栏中选择Transcations/Counter,如下图所示。

    测试步骤14

  15. 在左侧导航栏中选择Virtual User/Run,如下图所示。

    测试步骤15

请关注公众号获取更多资料

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注