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

使用PTS測(cè)試Hologres性能實(shí)踐

更新時(shí)間:

本文為您介紹如何通過(guò)阿里云性能測(cè)試PTS對(duì)Hologres的性能進(jìn)行壓測(cè),幫助您快速驗(yàn)證Hologres的性能。

背景信息

Hologres是兼容PostgreSQL協(xié)議的實(shí)時(shí)交互式分析引擎,可以使用pgbench工具對(duì)其進(jìn)行性能測(cè)試,詳情請(qǐng)參見(jiàn)測(cè)試方案介紹。但測(cè)試過(guò)程可能會(huì)受到網(wǎng)絡(luò)、測(cè)試參數(shù)配置等多方面因素的干擾,導(dǎo)致測(cè)試結(jié)果受到影響。測(cè)試環(huán)境的搭建也需要花費(fèi)較多精力。

阿里云性能測(cè)試PTS(Performance Testing Service)是一個(gè)具備分布式壓測(cè)能力的SaaS壓測(cè)平臺(tái),可以模擬復(fù)雜的測(cè)試場(chǎng)景,并快速精準(zhǔn)地調(diào)度不同規(guī)模的流量,同時(shí)提供壓測(cè)過(guò)程中多維度的監(jiān)控指標(biāo)和日志記錄。您無(wú)需準(zhǔn)備資源,即可按需發(fā)起壓測(cè)任務(wù)、監(jiān)控壓測(cè)指標(biāo)和獲取壓測(cè)報(bào)告,進(jìn)而高效率、全方位地驗(yàn)證產(chǎn)品性能。關(guān)于性能測(cè)試PTS的詳細(xì)信息請(qǐng)參見(jiàn)什么是性能測(cè)試PTS

本實(shí)踐通過(guò)性能測(cè)試PTS使用TPC-H(商業(yè)智能計(jì)算測(cè)試)對(duì)Hologres在OLAP查詢場(chǎng)景、Key/Value點(diǎn)查場(chǎng)景和數(shù)據(jù)更新場(chǎng)景的性能進(jìn)行測(cè)試。

說(shuō)明

本文的TPC-H的實(shí)現(xiàn)基于TPC-H的基準(zhǔn)測(cè)試,并不能與已發(fā)布的TPC-H基準(zhǔn)測(cè)試結(jié)果相比較,本文中的測(cè)試并不符合TPC-H基準(zhǔn)測(cè)試的所有要求。

前提條件

  • 已購(gòu)買并開(kāi)通Hologres實(shí)例,開(kāi)通方法請(qǐng)參見(jiàn)購(gòu)買Hologres

  • 已開(kāi)通性能測(cè)試PTS,詳情請(qǐng)參見(jiàn)開(kāi)通方式。推薦使用按量抵扣(預(yù)付費(fèi))-內(nèi)網(wǎng)專享版,使用阿里云VPC內(nèi)網(wǎng)進(jìn)行壓測(cè),可以提高測(cè)試結(jié)果準(zhǔn)確性、降低測(cè)試成本,詳情請(qǐng)參見(jiàn)按量抵扣(預(yù)付費(fèi))

場(chǎng)景說(shuō)明

本實(shí)踐壓測(cè)場(chǎng)景主要包含如下場(chǎng)景,場(chǎng)景詳情請(qǐng)參見(jiàn)測(cè)試方案介紹

說(shuō)明

如果PTS采用按量抵扣模式,費(fèi)用根據(jù)計(jì)費(fèi)項(xiàng)VUM消耗量進(jìn)行計(jì)算。VUM消耗量=施壓機(jī)數(shù)×單機(jī)并發(fā)數(shù)×壓測(cè)時(shí)長(zhǎng)(分鐘),其中單機(jī)并發(fā)數(shù)為固定值500。以本文的測(cè)試場(chǎng)景為例,VUM消耗量分別為:

  • OLAP查詢場(chǎng)景:1(使用資源IP數(shù),即施壓機(jī)數(shù))×500×110(分鐘)=55000 (VUM)

  • Key/Value點(diǎn)查場(chǎng)景:25(使用資源IP數(shù),即施壓機(jī)數(shù))×500×5(分鐘)=62500 (VUM)

  • 數(shù)據(jù)更新場(chǎng)景:與Key/Value點(diǎn)查場(chǎng)景一致。

如果選擇按量抵扣(預(yù)付費(fèi))-內(nèi)網(wǎng)專享版模式,僅需花費(fèi)58元,購(gòu)買20萬(wàn)VUM額度,即可完成一輪上述場(chǎng)景測(cè)試。

本文中的價(jià)格信息僅為示例值,實(shí)際使用過(guò)程中請(qǐng)以產(chǎn)品購(gòu)買頁(yè)價(jià)格為準(zhǔn)。

準(zhǔn)備工作

通過(guò)使用PTS進(jìn)行性能壓測(cè),您無(wú)需準(zhǔn)備測(cè)試所需的基礎(chǔ)環(huán)境,但您仍需針對(duì)不同的測(cè)試場(chǎng)景準(zhǔn)備相應(yīng)數(shù)據(jù)及測(cè)試語(yǔ)句。

  • OLAP查詢場(chǎng)景:需要?jiǎng)?chuàng)建列存表,從數(shù)據(jù)源中同步數(shù)據(jù),設(shè)計(jì)OLAP查詢測(cè)試語(yǔ)句。

  • Key/Value點(diǎn)查場(chǎng)景:需要?jiǎng)?chuàng)建行存表,從數(shù)據(jù)源中同步數(shù)據(jù),設(shè)計(jì)Key/Value點(diǎn)查測(cè)試語(yǔ)句。

  • 數(shù)據(jù)更新場(chǎng)景:需要?jiǎng)?chuàng)建表,寫(xiě)入原始數(shù)據(jù),并準(zhǔn)備需要進(jìn)行更新的數(shù)據(jù)。

    說(shuō)明
    • Hologres支持多種數(shù)據(jù)源的數(shù)據(jù)同步,包括MaxCompute數(shù)據(jù)同步、OSS數(shù)據(jù)湖同步、通過(guò)Copy命令導(dǎo)入本地文件、通過(guò)DataWorks同步MySQL等數(shù)據(jù)庫(kù)數(shù)據(jù)等,詳情參見(jiàn)數(shù)據(jù)同步概述

    • 創(chuàng)建Hologres內(nèi)部表的同時(shí),需要為其設(shè)置合適的索引,以獲得最優(yōu)的查詢性能。關(guān)于索引的創(chuàng)建,詳情請(qǐng)參見(jiàn)CREATE TABLE

本實(shí)踐以MaxCompute數(shù)據(jù)源為例,將MaxCompute公共空間MAXCOMPUTE_PUBLIC_DATA中的TPC-H 100 GB數(shù)據(jù)寫(xiě)入Hologres,作為本實(shí)踐的測(cè)試數(shù)據(jù)。

OLAP查詢場(chǎng)景

  • 測(cè)試數(shù)據(jù)準(zhǔn)備

    Hologres支持連接多種開(kāi)發(fā)工具,您可以使用HoloWeb登錄Hologres實(shí)例,創(chuàng)建數(shù)據(jù)庫(kù)并在SQL編輯器中執(zhí)行如下語(yǔ)句,完成內(nèi)部表、外部表的創(chuàng)建和寫(xiě)入測(cè)試數(shù)據(jù)。關(guān)于HoloWeb的簡(jiǎn)介與使用方法,請(qǐng)參見(jiàn)HoloWeb簡(jiǎn)介

    • 創(chuàng)建外部表。

      DROP FOREIGN TABLE IF EXISTS odps_customer_100g;
      DROP FOREIGN TABLE IF EXISTS odps_lineitem_100g;
      DROP FOREIGN TABLE IF EXISTS odps_nation_100g;
      DROP FOREIGN TABLE IF EXISTS odps_orders_100g;
      DROP FOREIGN TABLE IF EXISTS odps_part_100g;
      DROP FOREIGN TABLE IF EXISTS odps_partsupp_100g;
      DROP FOREIGN TABLE IF EXISTS odps_region_100g;
      DROP FOREIGN TABLE IF EXISTS odps_supplier_100g;
      
      IMPORT FOREIGN SCHEMA "MAXCOMPUTE_PUBLIC_DATA#default" LIMIT to
      (
          odps_customer_100g,
          odps_lineitem_100g,
          odps_nation_100g,
          odps_orders_100g,
          odps_part_100g,
          odps_partsupp_100g,
          odps_region_100g,
          odps_supplier_100g
      )
      FROM SERVER odps_server INTO public OPTIONS(if_table_exist 'error',if_unsupported_type 'error');
    • 創(chuàng)建內(nèi)部表。

      OLAP場(chǎng)景測(cè)試需要使用列存表(默認(rèn)即為列存),還需要?jiǎng)?chuàng)建合適的索引以達(dá)到更優(yōu)的查詢性能。更多關(guān)于表屬性的信息請(qǐng)參見(jiàn)CREATE TABLE

      DROP TABLE IF EXISTS LINEITEM;
      
      BEGIN;
      CREATE TABLE LINEITEM
      (
          L_ORDERKEY      BIGINT      NOT NULL,
          L_PARTKEY       INT         NOT NULL,
          L_SUPPKEY       INT         NOT NULL,
          L_LINENUMBER    INT         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    TEXT        NOT NULL,
          L_LINESTATUS    TEXT        NOT NULL,
          L_SHIPDATE      TIMESTAMPTZ NOT NULL,
          L_COMMITDATE    TIMESTAMPTZ NOT NULL,
          L_RECEIPTDATE   TIMESTAMPTZ NOT NULL,
          L_SHIPINSTRUCT  TEXT        NOT NULL,
          L_SHIPMODE      TEXT        NOT NULL,
          L_COMMENT       TEXT        NOT NULL,
          PRIMARY KEY (L_ORDERKEY,L_LINENUMBER)
      );
      CALL set_table_property('LINEITEM', 'clustering_key', 'L_SHIPDATE,L_ORDERKEY');
      CALL set_table_property('LINEITEM', 'segment_key', 'L_SHIPDATE');
      CALL set_table_property('LINEITEM', 'distribution_key', 'L_ORDERKEY');
      CALL set_table_property('LINEITEM', 'bitmap_columns', 'L_ORDERKEY,L_PARTKEY,L_SUPPKEY,L_LINENUMBER,L_RETURNFLAG,L_LINESTATUS,L_SHIPINSTRUCT,L_SHIPMODE,L_COMMENT');
      CALL set_table_property('LINEITEM', 'dictionary_encoding_columns', 'L_RETURNFLAG,L_LINESTATUS,L_SHIPINSTRUCT,L_SHIPMODE,L_COMMENT');
      COMMIT;
      
      DROP TABLE IF EXISTS ORDERS;
      
      BEGIN;
      CREATE TABLE ORDERS
      (
          O_ORDERKEY      BIGINT      NOT NULL PRIMARY KEY,
          O_CUSTKEY       INT         NOT NULL,
          O_ORDERSTATUS   TEXT        NOT NULL,
          O_TOTALPRICE    DECIMAL(15,2) NOT NULL,
          O_ORDERDATE     timestamptz NOT NULL,
          O_ORDERPRIORITY TEXT        NOT NULL,
          O_CLERK         TEXT        NOT NULL,
          O_SHIPPRIORITY  INT         NOT NULL,
          O_COMMENT       TEXT        NOT NULL
      );
      CALL set_table_property('ORDERS', 'segment_key', 'O_ORDERDATE');
      CALL set_table_property('ORDERS', 'distribution_key', 'O_ORDERKEY');
      CALL set_table_property('ORDERS', 'bitmap_columns', 'O_ORDERKEY,O_CUSTKEY,O_ORDERSTATUS,O_ORDERPRIORITY,O_CLERK,O_SHIPPRIORITY,O_COMMENT');
      CALL set_table_property('ORDERS', 'dictionary_encoding_columns', 'O_ORDERSTATUS,O_ORDERPRIORITY,O_CLERK,O_COMMENT');
      COMMIT;
      
      DROP TABLE IF EXISTS PARTSUPP;
      
      BEGIN;
      CREATE TABLE PARTSUPP
      (
          PS_PARTKEY    INT    NOT NULL,
          PS_SUPPKEY    INT    NOT NULL,
          PS_AVAILQTY   INT    NOT NULL,
          PS_SUPPLYCOST DECIMAL(15,2) NOT NULL,
          PS_COMMENT    TEXT   NOT NULL,
          PRIMARY KEY(PS_PARTKEY,PS_SUPPKEY)
      );
      CALL set_table_property('PARTSUPP', 'distribution_key', 'PS_PARTKEY');
      CALL set_table_property('PARTSUPP', 'bitmap_columns', 'PS_PARTKEY,PS_SUPPKEY,PS_AVAILQTY,PS_COMMENT');
      CALL set_table_property('PARTSUPP', 'dictionary_encoding_columns', 'PS_COMMENT');
      COMMIT;
      
      DROP TABLE IF EXISTS PART;
      
      BEGIN;
      CREATE TABLE PART
      (
          P_PARTKEY     INT    NOT NULL PRIMARY KEY,
          P_NAME        TEXT   NOT NULL,
          P_MFGR        TEXT   NOT NULL,
          P_BRAND       TEXT   NOT NULL,
          P_TYPE        TEXT   NOT NULL,
          P_SIZE        INT    NOT NULL,
          P_CONTAINER   TEXT   NOT NULL,
          P_RETAILPRICE DECIMAL(15,2) NOT NULL,
          P_COMMENT     TEXT   NOT NULL
      );
      CALL set_table_property('PART', 'distribution_key', 'P_PARTKEY');
      CALL set_table_property('PART', 'bitmap_columns', 'P_PARTKEY,P_SIZE,P_NAME,P_MFGR,P_BRAND,P_TYPE,P_CONTAINER,P_COMMENT');
      CALL set_table_property('PART', 'dictionary_encoding_columns', 'P_NAME,P_MFGR,P_BRAND,P_TYPE,P_CONTAINER,P_COMMENT');
      COMMIT;
      
      DROP TABLE IF EXISTS CUSTOMER;
      
      BEGIN;
      CREATE TABLE CUSTOMER
      (
          C_CUSTKEY    INT    NOT NULL PRIMARY KEY,
          C_NAME       TEXT   NOT NULL,
          C_ADDRESS    TEXT   NOT NULL,
          C_NATIONKEY  INT    NOT NULL,
          C_PHONE      TEXT   NOT NULL,
          C_ACCTBAL    DECIMAL(15,2) NOT NULL,
          C_MKTSEGMENT TEXT   NOT NULL,
          C_COMMENT    TEXT   NOT NULL
      );
      CALL set_table_property('CUSTOMER', 'distribution_key', 'C_CUSTKEY');
      CALL set_table_property('CUSTOMER', 'bitmap_columns', 'C_CUSTKEY,C_NATIONKEY,C_NAME,C_ADDRESS,C_PHONE,C_MKTSEGMENT,C_COMMENT');
      CALL set_table_property('CUSTOMER', 'dictionary_encoding_columns', 'C_NAME,C_ADDRESS,C_PHONE,C_MKTSEGMENT,C_COMMENT');
      COMMIT;
      
      DROP TABLE IF EXISTS SUPPLIER;
      
      BEGIN;
      CREATE TABLE SUPPLIER
      (
          S_SUPPKEY   INT    NOT NULL PRIMARY KEY,
          S_NAME      TEXT   NOT NULL,
          S_ADDRESS   TEXT   NOT NULL,
          S_NATIONKEY INT    NOT NULL,
          S_PHONE     TEXT   NOT NULL,
          S_ACCTBAL   DECIMAL(15,2) NOT NULL,
          S_COMMENT   TEXT   NOT NULL
      );
      CALL set_table_property('SUPPLIER', 'distribution_key', 'S_SUPPKEY');
      CALL set_table_property('SUPPLIER', 'bitmap_columns', 'S_SUPPKEY,S_NAME,S_ADDRESS,S_NATIONKEY,S_PHONE,S_COMMENT');
      CALL set_table_property('SUPPLIER', 'dictionary_encoding_columns', 'S_NAME,S_ADDRESS,S_PHONE,S_COMMENT');
      COMMIT;
      
      DROP TABLE IF EXISTS NATION;
      
      BEGIN;
      CREATE TABLE NATION(
        N_NATIONKEY INT NOT NULL PRIMARY KEY,
        N_NAME text NOT NULL,
        N_REGIONKEY INT NOT NULL,
        N_COMMENT text NOT NULL
      );
      CALL set_table_property('NATION', 'distribution_key', 'N_NATIONKEY');
      CALL set_table_property('NATION', 'bitmap_columns', 'N_NATIONKEY,N_NAME,N_REGIONKEY,N_COMMENT');
      CALL set_table_property('NATION', 'dictionary_encoding_columns', 'N_NAME,N_COMMENT');
      COMMIT;
      
      DROP TABLE IF EXISTS REGION;
      
      BEGIN;
      CREATE TABLE REGION
      (
          R_REGIONKEY INT  NOT NULL PRIMARY KEY,
          R_NAME      TEXT NOT NULL,
          R_COMMENT   TEXT
      );
      CALL set_table_property('REGION', 'distribution_key', 'R_REGIONKEY');
      CALL set_table_property('REGION', 'bitmap_columns', 'R_REGIONKEY,R_NAME,R_COMMENT');
      CALL set_table_property('REGION', 'dictionary_encoding_columns', 'R_NAME,R_COMMENT');
      COMMIT;
    • 測(cè)試數(shù)據(jù)寫(xiě)入并收集統(tǒng)計(jì)信息。

      說(shuō)明

      Hologres從V2.1.17版本起支持Serverless Computing能力,針對(duì)大數(shù)據(jù)量離線導(dǎo)入、大型ETL作業(yè)、外表大數(shù)據(jù)量查詢等場(chǎng)景,使用Serverless Computing執(zhí)行該類任務(wù)可以直接使用額外的Serverless資源,避免使用實(shí)例自身資源,無(wú)需為實(shí)例預(yù)留額外的計(jì)算資源,顯著提升實(shí)例穩(wěn)定性、減少OOM概率,且僅需為任務(wù)單獨(dú)付費(fèi)。Serverless Computing詳情請(qǐng)參見(jiàn)Serverless Computing概述,Serverless Computing使用方法請(qǐng)參見(jiàn)Serverless Computing使用指南

      -- (可選)推薦使用Serverless Computing執(zhí)行大數(shù)據(jù)量離線導(dǎo)入和ETL作業(yè)
      SET hg_computing_resource = 'serverless';
      
      INSERT INTO public.customer SELECT * FROM public.odps_customer_100g ;
      INSERT INTO public.lineitem SELECT * FROM public.odps_lineitem_100g ;
      INSERT INTO public.nation SELECT * FROM public.odps_nation_100g ;
      INSERT INTO public.orders SELECT * FROM public.odps_orders_100g ;
      INSERT INTO public.part SELECT * FROM public.odps_part_100g ;
      INSERT INTO public.partsupp SELECT * FROM public.odps_partsupp_100g ;
      INSERT INTO public.region SELECT * FROM public.odps_region_100g ;
      INSERT INTO public.supplier SELECT * FROM public.odps_supplier_100g ;
      
      -- 清理寫(xiě)入文件
      vacuum  nation;
      vacuum  region;
      vacuum  supplier;
      vacuum  customer;
      vacuum  part;
      vacuum  partsupp;
      vacuum  orders;
      vacuum  lineitem;
      -- 收集表的統(tǒng)計(jì)信息
      analyze nation;
      analyze region;
      analyze lineitem;
      analyze orders;
      analyze customer;
      analyze part;
      analyze partsupp;
      analyze supplier;
      -- 針對(duì)非主鍵的JOIN KEY收集統(tǒng)計(jì)信息
      analyze lineitem (l_orderkey,l_partkey,l_suppkey);
      analyze orders (o_custkey);
      analyze partsupp(ps_partkey,ps_suppkey);
      
      -- 重置配置,保證非必要的SQL不會(huì)使用serverless資源。
      RESET hg_computing_resource;
  • 性能測(cè)試

    1. 登錄PTS控制臺(tái),在左側(cè)導(dǎo)航欄選擇性能測(cè)試 > 創(chuàng)建場(chǎng)景,然后單擊PTS壓測(cè)

    2. 場(chǎng)景配置頁(yè)簽單擊HTTP壓測(cè)節(jié)點(diǎn)后的刪除圖標(biāo)圖標(biāo)刪除HTTP壓測(cè)節(jié)點(diǎn)。

      說(shuō)明

      PTS壓測(cè)場(chǎng)景中的串聯(lián)鏈路指一組壓測(cè)節(jié)點(diǎn)的有序集合。在實(shí)際測(cè)試過(guò)程中,一個(gè)串聯(lián)鏈路內(nèi)的壓測(cè)節(jié)點(diǎn)順序執(zhí)行,不同串聯(lián)鏈路間并行執(zhí)行。在本文的測(cè)試場(chǎng)景中,只需保留一個(gè)串聯(lián)鏈路,通過(guò)配置后續(xù)的并發(fā)數(shù)來(lái)模擬并行場(chǎng)景。

    3. 場(chǎng)景配置頁(yè)簽單擊添加壓測(cè)節(jié)點(diǎn)右側(cè)的下拉框,并在下拉列表單擊JDBC壓測(cè)節(jié)點(diǎn),然后在目標(biāo)串聯(lián)鏈路右側(cè)單擊tyu圖標(biāo),并在展開(kāi)區(qū)域配置壓測(cè)API的基本請(qǐng)求信息和連接池配置。

      分類

      參數(shù)

      說(shuō)明

      基本請(qǐng)求信息

      API名稱

      自定義API名稱。

      數(shù)據(jù)庫(kù)類型

      選擇PostgreSQL。

      數(shù)據(jù)庫(kù)URL

      格式為:{ENDPOINT}:{PORT}/{DBNAME}

      通過(guò)Hologres管理控制臺(tái)查看實(shí)例配置,建議使用VPC網(wǎng)絡(luò),詳情請(qǐng)參見(jiàn)實(shí)例配置

      示例:hgpostcn-cn-i7**********-cn-hangzhou-vpc.hologres.aliyuncs.com:80/db_name

      用戶名

      當(dāng)前賬號(hào)的AccessKey ID。

      您可以單擊AccessKey 管理,獲取AccessKey ID。

      密碼

      當(dāng)前賬號(hào)的AccessKey Secret。

      您可以單擊AccessKey 管理,獲取AccessKey Secret。

      SQL

      待執(zhí)行的SQL語(yǔ)句,本文使用TPC-H 22條查詢語(yǔ)句,SQL語(yǔ)句詳情請(qǐng)參見(jiàn)TPC-H 22條查詢語(yǔ)句

      超時(shí)時(shí)間

      需要結(jié)合待壓測(cè)接口的情況配置單接口的響應(yīng)超時(shí)時(shí)間,本示例取默認(rèn)值。

      limit

      結(jié)果集最大讀取行數(shù)(僅針對(duì)Select開(kāi)頭的SQL),最大為1000000,本示例取默認(rèn)值。

      連接池配置

      初始化連接數(shù)

      初始化時(shí)建立物理連接的個(gè)數(shù),本示例設(shè)置為1

      獲取連接最大等待時(shí)間

      從連接池中獲取空閑連接的等待時(shí)間,單位毫秒,本示例設(shè)置為4000

      最大連接數(shù)

      最大活躍連接數(shù)量,本示例設(shè)置為15,以匹配單并發(fā)與多并發(fā)多種測(cè)試場(chǎng)景。

      最小連接數(shù)

      池中最小空閑連接數(shù)量,本示例設(shè)置為1

      針對(duì)此OLAP查詢場(chǎng)景測(cè)試,TPC-H包含22條查詢語(yǔ)句。可以在同一條串聯(lián)鏈路下創(chuàng)建22個(gè)JDBC節(jié)點(diǎn),如下圖所示代表22條查詢語(yǔ)句。在壓測(cè)過(guò)程中,PTS會(huì)依次循環(huán)執(zhí)行這22條查詢語(yǔ)句。tpc-22

    4. 施壓配置頁(yè)簽,配置如下參數(shù),更多施壓配置相關(guān)內(nèi)容請(qǐng)參見(jiàn)壓力來(lái)源(公網(wǎng)和VPC)

      參數(shù)

      說(shuō)明

      壓力來(lái)源

      本示例選擇阿里云VPC內(nèi)網(wǎng),可以提高測(cè)試結(jié)果準(zhǔn)確性。選擇阿里云VPC內(nèi)網(wǎng)后,選擇地域

      VPC信息

      請(qǐng)您根據(jù)實(shí)際情況繼續(xù)選擇VPC安全組虛擬交換機(jī)

      壓力模式

      本示例選擇并發(fā)模式

      其他施壓配置參數(shù)需要根據(jù)測(cè)試目的的不同進(jìn)行調(diào)整。

      • 使用TPC-H數(shù)據(jù)進(jìn)行OLAP場(chǎng)景測(cè)試,主要關(guān)注的是單條Query的執(zhí)行時(shí)長(zhǎng),參數(shù)配置如下。

        參數(shù)

        說(shuō)明

        最大并發(fā)

        本示例設(shè)置為1,以確保每條query執(zhí)行時(shí)有充足的資源。

        遞增模式

        由于此處不涉及并發(fā)數(shù)的變化,因此只需保證并發(fā)數(shù)始終為1即可。

        壓測(cè)總時(shí)長(zhǎng)

        此處涉及22條查詢語(yǔ)句,因此測(cè)試時(shí)長(zhǎng)選擇110分鐘。

        指定IP數(shù)

        指發(fā)起壓測(cè)流量的IP地址數(shù)量,即施壓機(jī)數(shù)量。此處只需設(shè)置1個(gè)施壓IP。

      • 關(guān)注并發(fā)場(chǎng)景下的OLAP查詢性能,參數(shù)配置如下。

        選擇22條查詢語(yǔ)句中的5條(Q2、Q6、Q11、Q14、Q15),在測(cè)試過(guò)程中從3并發(fā)開(kāi)始,階梯式增加并發(fā)數(shù)至15

        遞增場(chǎng)景

        參數(shù)

        說(shuō)明

        最大并發(fā)

        可以設(shè)置為您希望達(dá)到的最高并發(fā),本示例取值15

        遞增模式

        選擇自動(dòng)遞增

        遞增百分比

        每次增加并發(fā)時(shí)的增幅,本示例設(shè)為20%

        單量級(jí)持續(xù)時(shí)長(zhǎng)

        每個(gè)并發(fā)數(shù)的測(cè)試時(shí)長(zhǎng),本示例設(shè)為20分鐘。

        壓測(cè)總時(shí)長(zhǎng)

        總測(cè)試時(shí)長(zhǎng),本示例設(shè)為100分鐘。

        指定IP數(shù)

        指發(fā)起壓測(cè)流量的IP地址數(shù)量,即施壓機(jī)數(shù)量。本示例設(shè)置1個(gè)施壓IP。

    5. 單擊下方調(diào)試場(chǎng)景,進(jìn)行場(chǎng)景調(diào)試。調(diào)試場(chǎng)景詳情請(qǐng)參見(jiàn)調(diào)試場(chǎng)景

      • 下圖為一個(gè)正常示例。調(diào)試正常

      • 下圖為一個(gè)異常示例,錯(cuò)誤原因可能是數(shù)據(jù)庫(kù)URL錯(cuò)誤、用戶名密碼錯(cuò)誤等,導(dǎo)致連接失敗。調(diào)試異常

    6. 單擊下方保存去壓測(cè)按鈕,選擇立即執(zhí)行后單擊確定,即可開(kāi)始?jí)簻y(cè)。

Key/Value點(diǎn)查場(chǎng)景

  • 測(cè)試數(shù)據(jù)準(zhǔn)備

    Key/Value點(diǎn)查場(chǎng)景繼續(xù)使用OLAP場(chǎng)景創(chuàng)建的數(shù)據(jù)庫(kù),使用TPC-H數(shù)據(jù)集中的ORDERS表進(jìn)行測(cè)試。您在登錄Hologres實(shí)例后,可以執(zhí)行如下語(yǔ)句建表并直接從OLAP場(chǎng)景的ORDERS表中寫(xiě)入數(shù)據(jù)。

    • 創(chuàng)建內(nèi)部表。

      Key/Value點(diǎn)查場(chǎng)景測(cè)試需要設(shè)置主鍵并使用行存表,還需要設(shè)置合適的索引以達(dá)到更優(yōu)的查詢性能。更多關(guān)于表屬性的信息請(qǐng)參見(jiàn)CREATE TABLE

      說(shuō)明

      由于點(diǎn)查場(chǎng)景需要使用行存表,所以不能使用OLAP查詢場(chǎng)景中創(chuàng)建的內(nèi)部表,需要重新創(chuàng)建一張內(nèi)部表。

      DROP TABLE IF EXISTS public.orders_row;
      
      BEGIN;
      CREATE TABLE public.orders_row(
          O_ORDERKEY       INT            NOT NULL PRIMARY KEY
          ,O_CUSTKEY       INT            NOT NULL
          ,O_ORDERSTATUS   TEXT           NOT NULL
          ,O_TOTALPRICE    DECIMAL(15,2)  NOT NULL
          ,O_ORDERDATE     TIMESTAMPTZ    NOT NULL
          ,O_ORDERPRIORITY TEXT           NOT NULL
          ,O_CLERK         TEXT           NOT NULL
          ,O_SHIPPRIORITY  INT            NOT NULL
          ,O_COMMENT       TEXT           NOT NULL
      );
      CALL SET_TABLE_PROPERTY('public.orders_row', 'orientation', 'row');
      CALL SET_TABLE_PROPERTY('public.orders_row', 'clustering_key', 'o_orderkey');
      CALL SET_TABLE_PROPERTY('public.orders_row', 'distribution_key', 'o_orderkey');
      COMMIT;
    • 寫(xiě)入數(shù)據(jù)

      -- (可選)推薦使用Serverless Computing執(zhí)行大數(shù)據(jù)量離線導(dǎo)入和ETL作業(yè)
      SET hg_computing_resource = 'serverless';
      
      INSERT INTO public.orders_row
      SELECT * FROM public.orders;
      
      -- 重置配置,保證非必要的SQL不會(huì)使用serverless資源。
      RESET hg_computing_resource;
  • 性能測(cè)試

    1. 登錄PTS控制臺(tái),在左側(cè)導(dǎo)航欄選擇性能測(cè)試 > 創(chuàng)建場(chǎng)景,然后單擊PTS壓測(cè)

    2. 場(chǎng)景配置頁(yè)簽單擊HTTP壓測(cè)節(jié)點(diǎn)后的刪除圖標(biāo)圖標(biāo)刪除HTTP壓測(cè)節(jié)點(diǎn)。

      說(shuō)明

      PTS壓測(cè)場(chǎng)景中的串聯(lián)鏈路指一組壓測(cè)節(jié)點(diǎn)的有序集合。在實(shí)際測(cè)試過(guò)程中,一個(gè)串聯(lián)鏈路內(nèi)的壓測(cè)節(jié)點(diǎn)順序執(zhí)行,不同串聯(lián)鏈路間并行執(zhí)行。在本文的測(cè)試場(chǎng)景中,只需保留一個(gè)串聯(lián)鏈路,通過(guò)配置后續(xù)的并發(fā)數(shù)來(lái)模擬并行場(chǎng)景。

    3. 場(chǎng)景配置頁(yè)簽單擊添加壓測(cè)節(jié)點(diǎn)右側(cè)的下拉框,并在下拉列表單擊JDBC壓測(cè)節(jié)點(diǎn),然后在目標(biāo)串聯(lián)鏈路右側(cè)單擊tyu圖標(biāo),并在展開(kāi)區(qū)域配置壓測(cè)API的基本請(qǐng)求信息、占位符信息和連接池配置。

      分類

      參數(shù)

      說(shuō)明

      基本請(qǐng)求信息

      API名稱

      自定義API名稱。

      數(shù)據(jù)庫(kù)類型

      選擇PostgreSQL。

      數(shù)據(jù)庫(kù)URL

      格式為:{ENDPOINT}:{PORT}/{DBNAME}

      通過(guò)Hologres管理控制臺(tái)查看實(shí)例配置,建議使用VPC網(wǎng)絡(luò),詳情請(qǐng)參見(jiàn)實(shí)例配置

      示例:hgpostcn-cn-i7**********-cn-hangzhou-vpc.hologres.aliyuncs.com:80/db_name

      用戶名

      當(dāng)前賬號(hào)的AccessKey ID。

      您可以單擊AccessKey 管理,獲取AccessKey ID。

      密碼

      當(dāng)前賬號(hào)的AccessKey Secret。

      您可以單擊AccessKey 管理,獲取AccessKey Secret。

      SQL

      待執(zhí)行的SQL語(yǔ)句。

      Key/Value點(diǎn)查場(chǎng)景的SQL與OLAP場(chǎng)景不同,查詢方式可以分為單值點(diǎn)查與多值點(diǎn)查,樣例SQL如下,詳情請(qǐng)參見(jiàn)測(cè)試方案介紹

      • 單值點(diǎn)查。

        SELECT
            O_ORDERKEY,
            O_CUSTKEY,
            O_ORDERSTATUS,
            O_TOTALPRICE,
            O_ORDERDATE,
            O_ORDERPRIORITY,
            O_CLERK,
            O_SHIPPRIORITY,
            O_COMMENT
        FROM
            public.orders_row
        WHERE
            o_orderkey = ?;
      • 多值點(diǎn)查,此處以9個(gè)值為例。

        SELECT
            O_ORDERKEY,
            O_CUSTKEY,
            O_ORDERSTATUS,
            O_TOTALPRICE,
            O_ORDERDATE,
            O_ORDERPRIORITY,
            O_CLERK,
            O_SHIPPRIORITY,
            O_COMMENT
        FROM
            public.orders_row
        WHERE
            o_orderkey IN (?, ?, ?, ?, ?, ?, ?, ?, ?);

      超時(shí)時(shí)間

      需要結(jié)合待壓測(cè)接口的情況配置單接口的響應(yīng)超時(shí)時(shí)間。

      limit

      結(jié)果集最大讀取行數(shù)(僅針對(duì)Select開(kāi)頭的SQL),最大為1,000,000。

      占位符

      Type

      本示例占位符Type使用bigint

      由于Key/Value點(diǎn)查場(chǎng)景需要隨機(jī)生成待查詢的主鍵值,在PTS中可以通過(guò)配置占位符實(shí)現(xiàn)。在SQL中使用?作為占位符,并在占位符中依次配置?代表的值。

      重要

      SQL中?的數(shù)量與占位符的數(shù)量需要相等,且二者按順序一一對(duì)應(yīng)。即本實(shí)踐中需要為多值點(diǎn)查的SQL示例配置九行占位符。

      Value

      PTS支持若干系統(tǒng)函數(shù),本示例使用random函數(shù),即Value值為:${sys.random(1,99999999)}

      連接池配置

      初始化連接數(shù)

      初始化時(shí)建立物理連接的個(gè)數(shù),Key/Value點(diǎn)查場(chǎng)景涉及并發(fā),這里先將壓測(cè)節(jié)點(diǎn)的連接數(shù)配置為20,對(duì)應(yīng)后文施壓配置中的每一臺(tái)施壓機(jī)都會(huì)產(chǎn)生20個(gè)連接。

      獲取連接最大等待時(shí)間

      從連接池中獲取空閑連接的等待時(shí)間,單位毫秒,本示例設(shè)置為4000

      最大連接數(shù)

      最大活躍連接數(shù)量,本示例設(shè)置為20

      最小連接數(shù)

      池中最小空閑連接數(shù)量,本示例設(shè)置為20

    4. 施壓配置頁(yè)簽,配置如下參數(shù),更多施壓配置相關(guān)內(nèi)容請(qǐng)參見(jiàn)壓力來(lái)源(公網(wǎng)和VPC)

      參數(shù)

      說(shuō)明

      壓力來(lái)源

      本示例選擇阿里云VPC內(nèi)網(wǎng),可以提高測(cè)試結(jié)果準(zhǔn)確性。選擇阿里云VPC內(nèi)網(wǎng)后,選擇地域

      VPC信息

      請(qǐng)您根據(jù)實(shí)際情況繼續(xù)選擇VPC安全組虛擬交換機(jī)

      壓力模式

      本示例選擇并發(fā)模式

      最大并發(fā)

      由于本文Key/Value點(diǎn)查場(chǎng)景針對(duì)Hologres 64CU規(guī)格實(shí)例的測(cè)試并發(fā)數(shù)為500,本示例設(shè)為500。因此,上文的連接池配置中,每臺(tái)機(jī)器在壓測(cè)節(jié)點(diǎn)上產(chǎn)生的連接數(shù)配置為20,以達(dá)到需要測(cè)試的500并發(fā)數(shù)。

      遞增模式

      由于本文的測(cè)試場(chǎng)景不涉及并發(fā)數(shù)的變化,因此該部分只需保證并發(fā)數(shù)始終為500即可,即本示例選擇自動(dòng)遞增

      遞增百分比

      為了保證并發(fā)數(shù)始終為500,本示例取值100%

      單量級(jí)持續(xù)時(shí)長(zhǎng)

      為了保證并發(fā)數(shù)始終為500,本示例取值1分鐘。

      壓測(cè)總時(shí)長(zhǎng)

      結(jié)合測(cè)試場(chǎng)景需要進(jìn)行填寫(xiě)。本場(chǎng)景僅涉及1條測(cè)試語(yǔ)句,因此測(cè)試時(shí)長(zhǎng)選擇5分鐘。

      指定IP數(shù)

      指發(fā)起壓測(cè)流量的IP地址數(shù)量,即施壓機(jī)數(shù)量。本場(chǎng)景預(yù)估達(dá)到的QPS為10萬(wàn),單臺(tái)施壓機(jī)可以提供的QPS上限為4000,因此本示例選擇25臺(tái)施壓機(jī)。

      說(shuō)明

      PTS在并發(fā)模式下,單個(gè)施壓機(jī)可以提供的QPS上限為4000,因此在實(shí)際測(cè)試場(chǎng)景中,需要結(jié)合可能達(dá)到的QPS值來(lái)確定施壓機(jī)數(shù)量,而后確定連接池配置。

    5. 單擊下方調(diào)試場(chǎng)景,進(jìn)行場(chǎng)景調(diào)試。調(diào)試場(chǎng)景詳情請(qǐng)參見(jiàn)調(diào)試場(chǎng)景

      • 下圖為一個(gè)正常示例。調(diào)試正常

      • 下圖為一個(gè)異常示例,錯(cuò)誤原因可能是數(shù)據(jù)庫(kù)URL錯(cuò)誤、用戶名密碼錯(cuò)誤等,導(dǎo)致連接失敗。調(diào)試異常

    6. 單擊下方保存去壓測(cè)按鈕,選擇立即執(zhí)行后單擊確定,即可開(kāi)始?jí)簻y(cè)。

數(shù)據(jù)更新場(chǎng)景

本文的數(shù)據(jù)更新場(chǎng)景使用與Key/Value點(diǎn)查場(chǎng)景相同的數(shù)據(jù)表,主要測(cè)試OLAP引擎在有主鍵情況下進(jìn)行數(shù)據(jù)更新的性能。

PTS測(cè)試場(chǎng)景配置內(nèi)容中,僅JDBC壓測(cè)節(jié)點(diǎn)信息中的SQL語(yǔ)句與Key/Value點(diǎn)查場(chǎng)景不同,其余配置項(xiàng)均可保持一致。數(shù)據(jù)更新場(chǎng)景的SQL語(yǔ)句如下。

INSERT INTO public.orders_row (o_orderkey, o_custkey, o_orderstatus, o_totalprice, o_orderdate, o_orderpriority, o_clerk, o_shippriority, o_comment)
    VALUES (?, 1, 'demo', 1.1, '2021-01-01', 'demo', 'demo', 1, 'demo')
ON CONFLICT (o_orderkey)
    DO UPDATE SET
        (o_orderkey, o_custkey, o_orderstatus, o_totalprice, o_orderdate, o_orderpriority, o_clerk, o_shippriority, o_comment) = ROW (excluded.*);

壓測(cè)報(bào)告查看

  1. 壓測(cè)完成后,在壓測(cè)報(bào)告頁(yè)簽單擊查看

    查看壓測(cè)報(bào)告

  2. 報(bào)告詳情頁(yè)面的概覽頁(yè)簽,可以查看壓測(cè)場(chǎng)景運(yùn)行成功與否。

    • 壓測(cè)運(yùn)行成功,可以查看成功率、平均RT、TPS/并發(fā)、異常數(shù)、總請(qǐng)求數(shù)等信息。其中,平均RT對(duì)應(yīng)平均查詢延遲,TPS指包含連接時(shí)間的每秒事務(wù)處理量。在本文的性能測(cè)試中,TPS與QPS大小一致。

    • 壓測(cè)運(yùn)行失敗,請(qǐng)求數(shù)等指標(biāo)均為0,可以通過(guò)選擇查看采樣日志 > 點(diǎn)擊查看詳情 > Error信息查看報(bào)錯(cuò)信息,進(jìn)行問(wèn)題排查。

  3. (可選)在報(bào)告詳情頁(yè)面單擊明細(xì),在壓測(cè)報(bào)告明細(xì)頁(yè)簽查看每個(gè)壓測(cè)節(jié)點(diǎn)(對(duì)應(yīng)每個(gè)Query)的相關(guān)指標(biāo)。

    如本文的OLAP查詢場(chǎng)景,針對(duì)單個(gè)串聯(lián)鏈路中包含多個(gè)壓測(cè)節(jié)點(diǎn)的場(chǎng)景,查看單個(gè)壓測(cè)節(jié)點(diǎn)的指標(biāo)。olap結(jié)果

更多關(guān)于壓測(cè)報(bào)告的內(nèi)容查看與分析,詳情請(qǐng)參見(jiàn)查看JDBC壓測(cè)報(bào)告

壓測(cè)結(jié)果

  • OLAP查詢場(chǎng)景

    • 在不配置并發(fā)時(shí),OLAP查詢場(chǎng)景關(guān)注的指標(biāo)為Query的查詢時(shí)長(zhǎng),即對(duì)應(yīng)下圖的平均RT,本文測(cè)試得到的TPC-H 22條Query執(zhí)行時(shí)長(zhǎng)之和約為25 solap結(jié)果1

    • 在配置并發(fā)后的OLAP場(chǎng)景測(cè)試結(jié)果如下,此時(shí)需要同時(shí)關(guān)注查詢時(shí)間及QPS兩項(xiàng)指標(biāo)。可以看出,隨著并發(fā)數(shù)的逐步提升,測(cè)試的QPS結(jié)果保持在5附近。您也可以前往明細(xì)頁(yè),選擇對(duì)應(yīng)時(shí)間段來(lái)查看每個(gè)并發(fā)數(shù)下的性能結(jié)果。olap結(jié)果2

  • Key/Value點(diǎn)查場(chǎng)景

    • 對(duì)于單值點(diǎn)查,本實(shí)踐壓測(cè)得到的QPS平均值超過(guò)100000key/value點(diǎn)查結(jié)果

    • 對(duì)于多值點(diǎn)查,以30個(gè)值的批量點(diǎn)查為例,本實(shí)踐得到的測(cè)試結(jié)果如下,其中QPS平均值為34819。最終的QPS性能為圖示平均QPS值乘以批量點(diǎn)查數(shù)量30,即34819 * 30 =1044570 keyvalue點(diǎn)查結(jié)果2