日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

TPC-H測試

本文詳細介紹了PolarDB-X的TPC-H測試設計、測試過程和測試結果。

背景信息

TPC-H是業界常用的一套Benchmark,由TPC委員會制定發布,用于評測數據庫的分析型查詢能力。TPC-H查詢包含8張數據表、22條復雜的SQL查詢,大多數查詢包含若干表Join、子查詢和Group-by聚合等。

說明

本文中TPC-H的實現基于TPC-H的基準測試,并不能與已發布的TPC-H基準測試結果相比較,本文中的測試并不符合TPC-H基準測試的所有要求。

測試設計

  • 測試數據量

    測試基于100 GB數據量(Scalar Factor=100),其中主要表數據量如下:

    • LINEITEM表約6億行

    • ORDERS表1.5億行

    • PART_SUPP表8000萬行

  • 測試所用實例規格

    節點規格

    節點數

    數據集大小

    8C64G

    6

    100 GB

  • 測試所用壓力機規格

    ecs.g7.4xlarge(16 vCPU,64 GB內存)

測試方法

  1. 準備壓力機ECS

    準備一個ECS,后續操作步驟中涉及的數據準備、運行壓測等使用的都是這臺ECS機器。

    說明

    測試所用ECS需要部署在VPC網絡內。請記錄該VPC的名稱和ID,后續的所有實例都將部署在該VPC內。

  2. 準備壓測所用PolarDB-X實例

    1. 創建PolarDB-X實例,詳細操作步驟請參見創建實例

      說明

      需保證ECS和PolarDB-X實例在同一個VPC中。

    2. 在實例中創建一個待壓測的數據庫(本測試中數據庫名為tpch_100g),詳細操作步驟請參見創建數據庫

      CREATE DATABASE tpch_100g MODE = 'auto';
    3. 在數據庫tpch_100g中創建對應的表,方法如下:

      CREATE TABLE `customer` (
        `c_custkey` int(11) NOT NULL,
        `c_name` varchar(25) NOT NULL,
        `c_address` varchar(40) NOT NULL,
        `c_nationkey` int(11) NOT NULL,
        `c_phone` varchar(15) NOT NULL,
        `c_acctbal` decimal(15,2) NOT NULL,
        `c_mktsegment` varchar(10) NOT NULL,
        `c_comment` varchar(117) NOT NULL,
        PRIMARY KEY (`c_custkey`)
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PARTITION BY KEY(`c_custkey`)
        PARTITIONS 192;
      
      CREATE TABLE `lineitem` (
        `l_orderkey` bigint(20) NOT NULL,
        `l_partkey` int(11) NOT NULL,
        `l_suppkey` int(11) NOT NULL,
        `l_linenumber` bigint(20) NOT NULL,
        `l_quantity` decimal(15,2) NOT NULL,
        `l_extendedprice` decimal(15,2) NOT NULL,
        `l_discount` decimal(15,2) NOT NULL,
        `l_tax` decimal(15,2) NOT NULL,
        `l_returnflag` varchar(1) NOT NULL,
        `l_linestatus` varchar(1) NOT NULL,
        `l_shipdate` date NOT NULL,
        `l_commitdate` date NOT NULL,
        `l_receiptdate` date NOT NULL,
        `l_shipinstruct` varchar(25) NOT NULL,
        `l_shipmode` varchar(10) NOT NULL,
        `l_comment` varchar(44) NOT NULL,
        KEY `IDX_LINEITEM_PARTKEY` (`l_partkey`),
       KEY `IDX_SUPPKEY` (`l_suppkey`),
        KEY `IDX_LINEITEM_SHIPDATE` (`l_shipdate`),
        PRIMARY KEY (`l_orderkey`,`l_linenumber`)
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PARTITION BY KEY(`l_orderkey`)
        PARTITIONS 192;
      
      CREATE TABLE `orders` (
        `o_orderkey` bigint(20) NOT NULL,
        `o_custkey` int(11) NOT NULL,
        `o_orderstatus` varchar(1) NOT NULL,
        `o_totalprice` decimal(15,2) NOT NULL,
        `o_orderdate` date NOT NULL,
        `o_orderpriority` varchar(15) NOT NULL,
        `o_clerk` varchar(15) NOT NULL,
        `o_shippriority` bigint(20) NOT NULL,
        `o_comment` varchar(79) NOT NULL,
        PRIMARY KEY (`O_ORDERKEY`)
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PARTITION BY KEY(`o_orderkey`)
        PARTITIONS 192;
      
      CREATE TABLE `part` (
        `p_partkey` int(11) NOT NULL,
        `p_name` varchar(55) NOT NULL,
        `p_mfgr` varchar(25) NOT NULL,
        `p_brand` varchar(10) NOT NULL,
        `p_type` varchar(25) NOT NULL,
        `p_size` int(11) NOT NULL,
        `p_container` varchar(10) NOT NULL,
        `p_retailprice` decimal(15,2) NOT NULL,
        `p_comment` varchar(23) NOT NULL,
        PRIMARY KEY (`p_partkey`)
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PARTITION BY KEY(`p_partkey`)
        PARTITIONS 192;
      
      CREATE TABLE `partsupp` (
        `ps_partkey` int(11) NOT NULL,
        `ps_suppkey` int(11) NOT NULL,
        `ps_availqty` int(11) NOT NULL,
        `ps_supplycost` decimal(15,2) NOT NULL,
        `ps_comment` varchar(199) NOT NULL,
        KEY `IDX_PARTSUPP_SUPPKEY` (`PS_SUPPKEY`),
        PRIMARY KEY (`ps_partkey`,`ps_suppkey`)
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PARTITION BY KEY(`ps_partkey`)
        PARTITIONS 192;
      
      CREATE TABLE `supplier` (
        `s_suppkey` int(11) NOT NULL,
        `s_name` varchar(25) NOT NULL,
        `s_address` varchar(40) NOT NULL,
        `s_nationkey` int(11) NOT NULL,
        `s_phone` varchar(15) NOT NULL,
        `s_acctbal` decimal(15,2) NOT NULL,
        `s_comment` varchar(101) NOT NULL,
        PRIMARY KEY (`s_suppkey`)
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PARTITION BY KEY(`s_suppkey`)
       PARTITIONS 192;
      
      CREATE TABLE `nation` (
        `n_nationkey` int(11) NOT NULL,
        `n_name` varchar(25) NOT NULL,
        `n_regionkey` int(11) NOT NULL,
        `n_comment` varchar(152) DEFAULT NULL,
        PRIMARY KEY (`n_nationkey`)
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1 broadcast;
      
      CREATE TABLE `region` (
        `r_regionkey` int(11) NOT NULL,
        `r_name` varchar(25) NOT NULL,
        `r_comment` varchar(152) DEFAULT NULL,
        PRIMARY KEY (`r_regionkey`)
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1 broadcast;
  3. 調整實例參數

    說明

    為了在壓測場景下達到最佳性能,需要調整PolarDB-X計算層實例參數。

    1. 修改參數XPROTO_MAX_DN_CONCURRENTXPROTO_MAX_DN_WAIT_CONNECTION的值為4000,詳細操作步驟請參見參數設置

    2. 通過命令行連接到PolarDB-X實例,在同一會話內執行如下SQL語句,關閉日志記錄與CPU采樣統計:

      set GLOBAL RECORD_SQL = false;
      set GLOBAL ENABLE_HTAP=true;
      set GLOBAL ENABLE_MASTER_MPP=true;
      set GLOBAL MPP_METRIC_LEVEL = 0;
      set GLOBAL ENABLE_CPU_PROFILE = false;
      set GLOBAL ENABLE_SORT_AGG=false;
      set GLOBAL MPP_PARALLELISM=192;
      set GLOBAL GROUP_PARALLELISM=8;
  4. 數據準備

    1. 導入壓測數據

      1. 下載并上傳數據導入工具BatchTool至壓力機(下載地址:https://github.com/polardb/polardbx-tools/releases)。更多信息,請參見使用Batch Tool工具導入導出數據

      2. 以alibaba cloud linux 3為例,執行以下命令在壓力機ECS上安裝Java環境:

        yum install -y  java-11-openjdk.x86_64
      3. 執行以下命令導入TPC-H 100 GB數據集:

        java -Xmn8g -Xmx16g -jar batch-tool.jar -h ${HOST} -P${PORT} -u ${USER} -p ${PASSWORD} -D tpch_100g -o import -benchmark tpch -scale 100 -s , -pro 1 -con 80 -minConn 81 -maxConn 81 -batchSize 500
        說明

        參數說明(請您根據實際測試數據庫信息進行替換):

        • {HOST}:主機名

        • {PORT}:端口號

        • {USER}:用戶名

        • {PASSWORD}:密碼

    2. 校驗數據完整性

      通過命令行連接到PolarDB-X實例,查詢每張表的數據量是否符合預期:

      select (select count(*) from customer) as customer_cnt,
       (select count(*)  from lineitem) as lineitem_cnt,
       (select count(*)  from nation) as nation_cnt,
       (select count(*)  from orders) as order_cnt,
       (select count(*) from part) as part_cnt,
       (select count(*) from partsupp) as partsupp_cnt,
       (select count(*) from region) as region_cnt,
       (select count(*) from supplier) as supplier_cnt;
      +--------------+--------------+------------+-----------+----------+--------------+------------+--------------+
      | customer_cnt | lineitem_cnt | nation_cnt | order_cnt | part_cnt | partsupp_cnt | region_cnt | supplier_cnt |
      +--------------+--------------+------------+-----------+----------+--------------+------------+--------------+
      |     15000000 |    600037902 |         25 | 150000000 | 20000000 |     80000000 |          5 |      1000000 |
      +--------------+--------------+------------+-----------+----------+--------------+------------+--------------+
    3. 采集統計信息

      通過命令行連接到PolarDB-X實例,執行analyze table收集表的統計信息:

      analyze table customer;
      analyze table lineitem;
      analyze table nation;
      analyze table orders;
      analyze table part;
      analyze table partsupp;
      analyze table region;
      analyze table supplier;
  5. 進行測試

    1. 下載測試腳本tpch-queries.tar.gz并解壓:

      tar xzvf tpch-queries.tar.gz
    2. 運行腳本,執行查詢并計時:

      cd tpch-queries
      'time' -f "%e" sh all_query.sh {HOST} {USER} {PASSWORD} {DB} {PORT}

測試結果

引擎版本MySQL 5.7

說明

SQL

執行耗時(秒)

01.sql

41.44

02.sql

1.66

03.sql

12.35

04.sql

2.84

05.sql

6.95

06.sql

7.71

07.sql

27.13

08.sql

9.44

09.sql

37.43

10.sql

4.92

11.sql

3.02

12.sql

9.7

13.sql

2.88

14.sql

1.72

15.sql

5.46

16.sql

1.63

17.sql

1.74

18.sql

11.28

19.sql

2.78

20.sql

9.77

21.sql

15.01

22.sql

2.39

合計

219.25

image

引擎版本MySQL 8.0

說明

SQL

執行耗時(秒)

01.sql

33.19

02.sql

1.96

03.sql

11.87

04.sql

2.6

05.sql

5.92

06.sql

8.83

07.sql

27.26

08.sql

10.34

09.sql

33.32

10.sql

4.89

11.sql

3.26

12.sql

8.67

13.sql

2.78

14.sql

1.62

15.sql

5.29

16.sql

1.79

17.sql

1.68

18.sql

11.19

19.sql

3.1

20.sql

11.14

21.sql

14.84

22.sql

2.13

合計

207.67

image