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

如何發(fā)起實(shí)時(shí)數(shù)倉(cāng)Hologres性能壓測(cè)

更新時(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)買(mǎi)并開(kāi)通Hologres實(shí)例,開(kāi)通方法請(qǐng)參見(jiàn)購(gòu)買(mǎi)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)買(mǎi)20萬(wàn)VUM額度,即可完成一輪上述場(chǎng)景測(cè)試。

本文中的價(jià)格信息僅為示例值,實(shí)際使用過(guò)程中請(qǐng)以產(chǎn)品購(gòu)買(mǎi)頁(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)建表概述
本實(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)建表概述
      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ì)信息。
      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);
  • 性能測(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)建表概述
      說(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ù)
      INSERT INTO public.orders_row
      SELECT * FROM public.orders;
  • 性能測(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示例配置九行占位符。
      ValuePTS支持若干系統(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