PolarDB-X 1.0 TPC-C测试说明

背景信息

TPC-C是业界常用的一套Benchmark,由TPC委员会制定发布,用于评测数据库的联机交易处理(偏向OLTP能力)。主要涉及10张表,包含了NewOrder(新订单的生成)、Payment(订单付款)、OrderStatus(最近订单查询)、Delivery(配送)和StockLevel(库存缺货状态分析)等五类业务事务模型。TPC-C使用tpmC值(Transactions per Minute)来衡量系统最大有效吞吐量(MQTh,Max Qualified Throughput),其中Transactions以NewOrder Transaction为准,即最终衡量单位为每分钟处理的新订单数。

说明 本文的TPC-C的实现基于TPC-C的基准测试,并不能与已发布的TPC-C基准测试结果相比较,本文中的测试并不符合TPC-C基准测试的所有要求。

测试设计

  • 测试数据量
    • 针对普通实例性能测试,TPC-C测试结果主要基于1000 Warehouse,其中主要的表数据量如下:
      • bmsql_order_line 3亿行
      • bmsql_stock 1亿行
      • bmsql_customer、bmsql_history、bmsql_oorder各3000万行
    • 为了验证PolarDB-X 1.0的水平扩展能力,还引入了超大规格实例的TPC-C测试,相比于普通实例扩展了近10倍的资源。在超大规格压测设计上,构建了10000 Warehouse,同时TPC-C施压机需要增加到3台32核的ECS机器,避免压测本身成为了瓶颈点。
  • 测试所用实例规格
    • 企业版测试环境:PolarDB-X 1.0计算资源实例企业版32核128 GB(单节点16核64 GB)、4台RDS MySQL 5.7实例(8核32 GB独享型)。
    • 标准版测试环境:PolarDB-X 1.0计算资源实例标准版16核64 GB(单节点8核32 GB)、4台RDS MySQL 5.7实例(4核32 GB独享型)。
    • 超大规格测试环境:PolarDB-X 1.0计算资源实例企业版256核1024 GB(单节点16核64 GB)、12台RDS MySQL 5.7实例(32核128 GB独享型)。

测试方法

  • 步骤1:准备压力机ECS

    需准备一个ECS,后续操作步骤中涉及的数据准备、运行压测等使用的都是这台ECS机器。

    说明 建议将测试所用ECS部署在VPC网络内(如选择经典网络可能出现RDS某些规格没有库存的情况)。请记住该VPC的名称和ID,后续的所有实例都将部署在该VPC内。

  • 步骤2:准备压测所用PolarDB-X 1.0实例

    1. 创建PolarDB-X 1.0实例,详细操作步骤请参见步骤一:购买PolarDB-X 1.0计算层资源创建实例
    2. 在实例中创建一个待压测的数据库(本测试中数据库名为tpcc,详细操作步骤请参见步骤二:在私有定制RDS实例之上构建PolarDB-X 1.0数据库

    说明 需保证ECS和在同一个VPC中。

  • 步骤3:压测数据准备

    1. 准备压测工具

      说明

      1. 下载改造好的压测包tpcc.tar.gz,并在ECS中执行如下命令将其解压到tpcc目录:

        mkdir tpcc 
        tar zxvf tpcc.tar.gz -C tpcc        
        
      2. 按如下说明修改压缩包内的对应文件:

        src/client/jTPCC.java(增加一个MySQL的type)
        src/client/jTPCCConnection.java(支持MySQL的语法,加一个别名)
        src/LoadData/LoadData.java(关闭loader数据时的大事务机制)
        src/LoadData/LoadDataWorker.java(关闭loader数据时的大事务机制)
        run/funcs.sh(脚本增加一个MySQL的type)
        run/runDatabaseBuild.sh(去掉不必要的阶段)
        run/runBenchmark.sh(调整默认jvm参数)
        run/runLoader.sh(调整默认jvm参数)
        run/sql.common/foreignKeys.sql (注释全部外键创建,PolarDB-X 1.0不支持外键)
        run/sql.common/indexCreates.sql (注释掉全部主键创建,只留2个索引创建,MySQL默认在建表时直接创建索引)
        run/sql.common/indexDrops.sql(注释全部主键删除)
        run/sql.common/tableCreates.sql(添加主键和拆分键,PolarDB-X 1.0需要指定拆分键)
        
    2. 准备压测配置

      在ECS中执行如下命令,在tpcc/run目录下创建props.mysql文件:

      // --------- env config --------- // 
      db=mysql
      driver=com.mysql.jdbc.Driver
      conn=jdbc:mysql://drdsxxxx:3306/tpcc?
      useSSL=false&useServerPrepStmts=false&useConfigs=maxPerformance&rewriteBatchedStatements=true
      user=tpcc
      password=tpcc
      
      // warehouse 数量
      warehouses=1000
      // 导入数据的并发数,每100并发预计产生2万TPS,可以结合目标TPS能力调整并发
      // runLoader.sh的jvm内存,100并发默认为4 GB,500并发建议设置为16 GB
      loadWorkers=100
      
      // TPC-C 压测并发数
      terminals=1000
      // 压测时间,单位分钟
      runMins=10
      // ---------- default config ------- //
      //To run specified transactions per terminal- runMins must equal zero
      runTxnsPerTerminal=0
      //Number of total transactions per minute
      limitTxnsPerMin=0
      
      //Set to true to run in 4.x compatible mode. Set to false to use the
      //entire configured database evenly.
      terminalWarehouseFixed=true
      
      //The following five values must add up to 100
      //The default percentages of 45, 43, 4, 4 & 4 match the TPC-C spec
      newOrderWeight=45
      paymentWeight=43
      orderStatusWeight=4
      deliveryWeight=4
      stockLevelWeight=4
      
      // Directory name to create for collecting detailed result data.
      // Comment this out to suppress.
      resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
      
      // osCollectorScript=./misc/os_collector_linux.py
      // osCollectorInterval=1
      // osCollectorSSHAddr=user@dbhost
      // osCollectorDevices=net_eth0 blk_sda
      

      说明

      • 导入压测数据时,需要关注warehouses(仓库数)和loadWorkers(并发数)。
      • TPC-C压测时,需要关注terminals(并发数)和runMins(运行时间)。
    3. 压测执行

      1. 在ECS中执行如下命令准备压测数据:

        cd tpcc/run
        nohup ./runDatabaseBuild.sh props.mysql &
        

        说明 默认按照100并发导入,总共5亿多记录,整体导入时间在小时级别,建议通过nohup推到后台运行,避免ssh命令行断开导致导入中断。

      2. 执行如下命令运行TPC-C测试:

        cd tpcc/run
        ./runBenchmark.sh props.mysql
        

        运行之后可以看到如下测试结果:

        08:56:16,844 [Thread-883] INFO   jTPCC : Term-00, Measured tpmC (NewOrders) = 104230.88
        08:56:16,844 [Thread-883] INFO   jTPCC : Term-00, Measured tpmTOTAL = 231664.49
        08:56:16,844 [Thread-883] INFO   jTPCC : Term-00, Session Start     = 2019-09-19 08:54:16
        08:56:16,845 [Thread-883] INFO   jTPCC : Term-00, Session End       = 2019-09-19 08:56:16
        08:56:16,845 [Thread-883] INFO   jTPCC : Term-00, Transaction Count = 465440
        

        说明 tpmC值即为对应压测场景下的结果。更多测试结果详情,请参见测试结果

      3. 执行如下命令清理压测数据:

        cd tpcc/run
        ./runDatabaseDestroy.sh props.mysql
        

测试结果

<caption style="padding: 0px; margin: 0px; box-sizing: border-box; font-style: normal; font-weight: 500; text-align: left;"></caption><colgroup style="padding: 0px; margin: 0px; box-sizing: border-box;"><col style="padding: 0px; margin: 0px; box-sizing: border-box; width: 202.25px;"><col style="padding: 0px; margin: 0px; box-sizing: border-box; width: 202.25px;"><col style="padding: 0px; margin: 0px; box-sizing: border-box; width: 202.25px;"><col style="padding: 0px; margin: 0px; box-sizing: border-box; width: 202.25px;"></colgroup>

并发度 标准版实例tpmC 企业版实例tpmC 超大规格实例tpmC
1个客户端x 1000并发 65,735.14 101,620.8 /
6个客户端x 1000并发 / / 821,547.97

[图片上传失败...(image-8ee409-1648452478887)]

</article>

</main>

上一篇:性能白皮书下一篇:TPC-H测试说明

猜你想看

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容