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/ Etapa 4: criar outra tabela e carregar dados
Atualizado em 2024-05-09 GMT+08:00

Etapa 4: criar outra tabela e carregar dados

Depois de selecionar um modo de armazenamento, nível de compactação, modo de distribuição e chave de distribuição para cada tabela, use esses atributos para criar tabelas e recarregar dados. Compare o desempenho do sistema antes e depois da recriação da mesa.

  1. Exclua as tabelas criadas anteriormente.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    DROP TABLE store_sales;
    DROP TABLE date_dim;
    DROP TABLE store;
    DROP TABLE item;
    DROP TABLE time_dim;
    DROP TABLE promotion;
    DROP TABLE customer_demographics;
    DROP TABLE customer_address;
    DROP TABLE household_demographics;
    DROP TABLE customer;
    DROP TABLE income_band;
    
    DROP FOREIGN TABLE obs_from_store_sales_001;
    DROP FOREIGN TABLE obs_from_date_dim_001;
    DROP FOREIGN TABLE obs_from_store_001;
    DROP FOREIGN TABLE obs_from_item_001;
    DROP FOREIGN TABLE obs_from_time_dim_001;
    DROP FOREIGN TABLE obs_from_promotion_001;
    DROP FOREIGN TABLE obs_from_customer_demographics_001;
    DROP FOREIGN TABLE obs_from_customer_address_001;
    DROP FOREIGN TABLE obs_from_household_demographics_001;
    DROP FOREIGN TABLE obs_from_customer_001;
    DROP FOREIGN TABLE obs_from_income_band_001;
    

  2. Crie tabelas e especifique modos de armazenamento e distribuição para elas.

    Somente a sintaxe para recriar a tabela store_sales é fornecida para simplificar. Para recriar todas as outras tabelas, copie a sintaxe em Criação de uma outra tabela após a otimização do design.

     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
    CREATE TABLE store_sales
    (
        ss_sold_date_sk           integer                       ,
        ss_sold_time_sk           integer                       ,
        ss_item_sk                integer               not null,
        ss_customer_sk            integer                       ,
        ss_cdemo_sk               integer                       ,
        ss_hdemo_sk               integer                       ,
        ss_addr_sk                integer                       ,
        ss_store_sk               integer                       ,
        ss_promo_sk               integer                       ,
        ss_ticket_number          bigint               not null,
        ss_quantity               integer                       ,
        ss_wholesale_cost         decimal(7,2)                  ,
        ss_list_price             decimal(7,2)                  ,
        ss_sales_price            decimal(7,2)                  ,
        ss_ext_discount_amt       decimal(7,2)                  ,
        ss_ext_sales_price        decimal(7,2)                  ,
        ss_ext_wholesale_cost     decimal(7,2)                  ,
        ss_ext_list_price         decimal(7,2)                  ,
        ss_ext_tax                decimal(7,2)                  ,
        ss_coupon_amt             decimal(7,2)                  ,
        ss_net_paid               decimal(7,2)                  ,
        ss_net_paid_inc_tax       decimal(7,2)                  ,
        ss_net_profit             decimal(7,2)                  
    ) 
    WITH (ORIENTATION = column,COMPRESSION=middle)
    DISTRIBUTE BY hash (ss_item_sk);
    

  3. Carregue dados de exemplo nessas tabelas.
  4. Registre o tempo de carregamento nas tabelas de referência.

    Referência

    Antes de

    Depois

    Tempo de carregamento (11 tabelas)

    341584 ms

    257241 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

    -

  5. Execute o comando ANALYZE para atualizar as estatísticas.

    1
    ANALYZE;
    

    Se ANALYZE for retornado, a execução é bem-sucedida.

    1
    ANALYZE
    

  6. Verifique se há distorção de dados.

    Para uma tabela hash, uma chave de distribuição imprópria pode causar distorção de dados ou desempenho ruim de I/O em determinados DNs. Portanto, você precisa verificar a tabela para garantir que os dados sejam distribuídos uniformemente em cada DN. Você pode executar as seguintes instruções SQL para verificar a distorção de dados:

    1
    SELECT a.count,b.node_name FROM (SELECT count(*) AS count,xc_node_id FROM table_name GROUP BY xc_node_id) a, pgxc_node b WHERE a.xc_node_id=b.node_id ORDER BY a.count desc;
    

    xc_node_id corresponde a um DN. Geralmente, mais de 5% de diferença entre a quantidade de dados em diferentes DNs é considerada como distorção de dados. Se a diferença for superior a 10%, escolha outra chave de distribuição. No GaussDB(DWS), você pode selecionar várias chaves de distribuição para distribuir os dados uniformemente.