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.
- 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;
- 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);
- Carregue dados de exemplo nessas tabelas.
- 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
-
- Execute o comando ANALYZE para atualizar as estatísticas.
1
ANALYZE;
Se ANALYZE for retornado, a execução é bem-sucedida.
1
ANALYZE
- 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.