Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ GaussDB(DWS)/ Melhores práticas/ Práticas da otimização de tabela/ Passo 2: testar o desempenho do sistema da tabela inicial e estabelecer uma linha de base
Atualizado em 2024-05-09 GMT+08:00

Passo 2: testar o desempenho do sistema da tabela inicial e estabelecer uma linha de base

Antes e depois de ajustar as estruturas da tabela, teste e registre as seguintes informações para comparar as diferenças no desempenho do sistema:

  • Tempo de carregamento
  • Espaço de armazenamento ocupado por tabelas
  • Desempenho da consulta

Os exemplos nesta prática são baseados em um cluster dws.d2.xlarge composto por oito nós. Como o desempenho do sistema é afetado por muitos fatores, clusters do mesmo sabor podem ter resultados diferentes.

Modelo

dws.d2.xlarge VM

CPU

4*CPU E5-2680 v2 @ 2.80GHZ

Memória

32 GB

Rede

1 GB

Disco

1,63 TB

Número de nós

8

Registre os resultados usando a seguinte tabela de referência.

Referência

Antes de

Depois

Tempo de carregamento (11 tabelas)

341584 ms

-

Espaço de armazenamento ocupado

Store_Sales

-

-

Date_Dim

-

-

Store

-

-

Item

-

-

Time_Dim

-

-

Promotion

-

-

Customer_Demographics

-

-

Customer_Address

-

-

Household_Demographics

-

-

Customer

-

-

Income_Band

-

-

Espaço total de armazenamento

-

-

Tempo de execução da consulta

Consulta 1

-

-

Consulta 2

-

-

Consulta 3

-

-

Tempo total de execução

-

-

Execute as seguintes etapas para testar o desempenho do sistema antes de ajustar para estabelecer uma referência:

  1. Insira o tempo de carregamento cumulativo para todas as 11 tabelas na tabela de referências na coluna Before.
  2. Registre o uso do espaço de armazenamento de cada tabela.

    Determine quanto espaço em disco é usado para cada tabela usando a função pg_size_pretty e registre os resultados em tabelas básicas.

    1
    SELECT T_NAME, PG_SIZE_PRETTY(PG_RELATION_SIZE(t_name)) FROM (VALUES('store_sales'),('date_dim'),('store'),('item'),('time_dim'),('promotion'),('customer_demographics'),('customer_address'),('household_demographics'),('customer'),('income_band')) AS names1(t_name);
    

    As seguintes informações são exibidas:

             t_name         | pg_size_pretty
    ------------------------+----------------
     store_sales            | 42 GB
     date_dim               | 11 MB
     store                  | 232 kB
     item                   | 110 MB
     time_dim               | 11 MB
     promotion              | 256 kB
     customer_demographics  | 171 MB
     customer_address       | 170 MB
     household_demographics | 504 kB
     customer               | 441 MB
     income_band            | 88 kB
    (11 rows)

  3. Teste o desempenho da consulta.

    Execute as seguintes consultas e registre o tempo gasto em cada consulta. As durações de execução da mesma consulta podem ser diferentes, dependendo do cache do sistema operacional durante a execução. É aconselhável realizar várias rodadas de testes e selecionar um grupo com valores médios.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    \timing on
    SELECT * FROM (SELECT  COUNT(*)  
    FROM store_sales 
        ,household_demographics  
        ,time_dim, store 
    WHERE ss_sold_time_sk = time_dim.t_time_sk    
        AND ss_hdemo_sk = household_demographics.hd_demo_sk  
        AND ss_store_sk = s_store_sk 
        AND time_dim.t_hour = 8 
        AND time_dim.t_minute >= 30 
        AND household_demographics.hd_dep_count = 5 
        AND store.s_store_name = 'ese' 
    ORDER BY COUNT(*) 
     ) LIMIT 100;
    
    SELECT * FROM (SELECT  i_brand_id brand_id, i_brand brand, i_manufact_id, i_manufact,
    SUM(ss_ext_sales_price) ext_price
     FROM date_dim, store_sales, item,customer,customer_address,store
     WHERE d_date_sk = ss_sold_date_sk
       AND ss_item_sk = i_item_sk
       AND i_manager_id=8
       AND d_moy=11
       AND d_year=1999
       AND ss_customer_sk = c_customer_sk 
       AND c_current_addr_sk = ca_address_sk
       AND substr(ca_zip,1,5) <> substr(s_zip,1,5) 
       AND ss_store_sk = s_store_sk 
     GROUP BY i_brand
          ,i_brand_id
          ,i_manufact_id
          ,i_manufact
     ORDER BY ext_price desc
             ,i_brand
             ,i_brand_id
             ,i_manufact_id
             ,i_manufact
     ) LIMIT 100;
    
    SELECT * FROM (SELECT  s_store_name, s_store_id,
            SUM(CASE WHEN (d_day_name='Sunday') THEN ss_sales_price ELSE null END) sun_sales,
            SUM(CASE WHEN (d_day_name='Monday') THEN ss_sales_price ELSE null END) mon_sales,
            SUM(CASE WHEN (d_day_name='Tuesday') THEN ss_sales_price ELSE  null END) tue_sales,
            SUM(CASE WHEN (d_day_name='Wednesday') THEN ss_sales_price ELSE null END) wed_sales,
            SUM(CASE WHEN (d_day_name='Thursday') THEN ss_sales_price ELSE null END) thu_sales,
            SUM(CASE WHEN (d_day_name='Friday') THEN ss_sales_price ELSE null END) fri_sales,
            SUM(CASE WHEN (d_day_name='Saturday') THEN ss_sales_price ELSE null END) sat_sales
     FROM date_dim, store_sales, store
     WHERE d_date_sk = ss_sold_date_sk AND
           s_store_sk = ss_store_sk AND
           s_gmt_offset = -5 AND
           d_year = 2000 
     GROUP BY s_store_name, s_store_id
     ORDER BY s_store_name, s_store_id,sun_sales,mon_sales,tue_sales,wed_sales,thu_sales,fri_sales,sat_sales
      ) LIMIT 100;
    

Após a recolha das estatísticas anteriores, a tabela de referência é a seguinte:

Referência

Antes de

Depois

Tempo de carregamento (11 tabelas)

341584 ms

-

Espaço de armazenamento ocupado

Store_Sales

42 GB

-

Date_Dim

11 MB

-

Store

232 KB

-

Item

110 MB

-

Time_Dim

11 MB

-

Promotion

256 KB

-

Customer_Demographics

171 MB

-

Customer_Address

170 MB

-

Household_Demographics

504 KB

-

Customer

441 MB

-

Income_Band

88 KB

-

Espaço total de armazenamento

42 GB

-

Tempo de execução da consulta

Consulta 1

14552,05 ms

-

Consulta 2

27952,36 ms

-

Consulta 3

17721,15 ms

-

Tempo total de execução

60225,56 ms

-