Skip to content

Performance

agapple edited this page Mar 2, 2016 · 2 revisions
  • 性能测试
    • 全量测试
      • 场景1 (单主键,大文本字段,存在blob/clob, 平均大小2.1KB,支持断点模式)
      • 场景2 (多主键,普通类型,平均大小100B,不支持断点模式)
      • 场景3 (单主键,普通类型,平均大小100B,支持断点模式)
      • 场景4 (普通类型,平均大小2.1KB,支持/不支持断点模式)
    • 增量测试
      • 场景1 (单主键,大文本字段,存在blob/clob, 平均大小2.1KB)
      • 场景2 (普通类型,平均大小100B)
      • 场景3 (单主键,平均大小100B)
      • 场景4 (普通类型,平均大小2.1KB)
  • 稳定性测试

性能测试

测试机器:

机器型号
oracle CPU:E2630 96GB MEM, SATA 12*2T
mysql CPU:L5630 48GB MEM, SATA 2T

愚公任务运行机器测试中部署在mysql机器上.

测试计划:

  1. 常见字段测试(主要包括:number,varchar,char,date,clob,blob)
  2. 针对不同主键的表(主要包括:单主键,多主键,不同主键类型,数字/字符等)
  3. 数据平均大小不同 (主要包括:100B/2KB)
  4. 全量/增量测试

全量测试

场景1 (单主键,大文本字段,存在blob/clob, 平均大小2.1KB,支持断点模式)

create table test_all_one_pk
(
    id NUMBER(11)  ,
    name varchar2(32) ,
    alias_name  char(32) default ' ' not null,
    amount number(11,2),
    score  number(20),
    text_b blob,
    text_c clob,
    gmt_create date not null,
    gmt_modified date not null,
    CONSTRAINT test_all_one_pk_id  PRIMARY   KEY (id)
);

测试结果:

总记录数:2610000,统计记录数:5000,数据同步TPS:115,最长时间:9736,最小时间:8161,平均时间:8658

场景2 (多主键,普通类型,平均大小100B,不支持断点模式)

create table test_all_two_pk
(
    id NUMBER(11)  ,
    name varchar2(32) ,
    alias_name  char(32) default ' ' not null,
    amount number(11,2),
    score  number(20),
    gmt_create date not null,
    gmt_modified date not null,
    CONSTRAINT test_all_two_pk_id  PRIMARY   KEY (id,name)
);

测试结果:

总记录数:2689614,采样记录数:5000,同步TPS:30388,最长时间:264,最小时间:15,平均时间:23

场景3 (单主键,普通类型,平均大小100B,支持断点模式)

create table test_all_small_data
(
    id NUMBER(11)  ,
    name varchar2(32) ,
    alias_name  char(32) default ' ' not null,
    amount number(11,2),
    score  number(20),
    gmt_create date not null,
    gmt_modified date not null,
    CONSTRAINT test_all_small_data_id  PRIMARY   KEY (id)
);

测试结果:

总记录数:180000,采样记录数:5000,同步TPS:4681,最长时间:215,最小时间:212,平均时间:213

场景4 (普通类型,平均大小2.1KB,支持/不支持断点模式)

create table test_all_large_data
(
    id NUMBER(11)  ,
    name varchar2(32) ,
    alias_name  char(32) default ' ' not null,
    amount number(11,2),
    score  number(20),
    text_b varchar(1024),
    text_c varchar(1024),
    gmt_create date not null,
    gmt_modified date not null,
    CONSTRAINT test_all_large_data_id  PRIMARY   KEY (id)
);

测试结果:

  • 支持断点模式
    总记录数:83207,采样记录数:83207,同步TPS:2827,最长时间:507,最小时间:79,平均时间:350
  • 不支持断点模式
    总记录数:83207,采样记录数:83207,同步TPS:9130,最长时间:541,最小时间:20,平均时间:108

增量测试

场景1 (单主键,大文本字段,存在blob/clob, 平均大小2.1KB)

反查线程数20的结果,每批1000条
总记录数:85000,采样记录数:5000,同步TPS:1073,最长时间:1001,最小时间:828,平均时间:931

场景2 (普通类型,平均大小100B)

反查线程数10的结果,每批1000条
总记录数:84944,采样记录数:5000,同步TPS:1530,最长时间:694,最小时间:602,平均时间:653
反查线程数15的结果,每批2000条
总记录数:40000,采样记录数:10000,同步TPS:1811,最长时间:1170,最小时间:1013,平均时间:1104
反查线程数20的结果,每批2000条
总记录数:99207,采样记录数:10000,同步TPS:2081,最长时间:1013,最小时间:897,平均时间:960
反查线程数30的结果,每批1000条
总记录数:35000,采样记录数:5000,同步TPS:2102,最长时间:487,最小时间:468,平均时间:475
反查线程数30的结果,每批2000条
总记录数:70000,采样记录数:10000,同步TPS:2185,最长时间:932,最小时间:892,平均时间:915

场景3 (单主键,平均大小100B)

反查线程数20的结果,每批1000条
总记录数:80000,采样记录数:5000,同步TPS:2065,最长时间:540,最小时间:436,平均时间:484
反查线程数20的结果,每批2000条
总记录数:80000,采样记录数:10000,同步TPS:2093,最长时间:996,最小时间:928,平均时间:955

场景4 (普通类型,平均大小2.1KB)

反查线程数20的结果,每批1000条
总记录数:85000,采样记录数:5000,同步TPS:2075,最长时间:503,最小时间:436,平均时间:481

性能测试总结

  • 每批大小1000和2000区别不大,线程数20~30 tps变化不大. 建议配置为每批大小1000,extractor/applier线程数为20.
  • 100B大小,增量同步平均在2000tps左右,全量同步(select id>? and rownum<=xxx模式,支持断点)平均5000tps,全量同步(select(*)模式,不支持断点)平均30000tps
  • 2KB大小,增量同步平均在2000tps左右,全量同步(select id>? and rownum<=xxx模式,支持断点)平均为2800tps,全量同步(select /+parallel(t)/ (*)模式,不支持断点)平均9000tps.
  • 带blob/clob类型,2KB大小全量同步100tps,增量同步1000tps,增量比全量快的原因,主要是增量采用了多线程拉取。与不带blob/clob相比,全量为其1/20,增量为其1/2.

稳定性测试

测试方式:源库按照特定200tps频率持续造数据(I/U/D比例为10:10:1),持续运行48小时,监控整个运行状态.
测试结果:总共同步3000w记录变更,整个jvm无内存泄漏,同步无中断,数据对比全通过