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:
- Insira o tempo de carregamento cumulativo para todas as 11 tabelas na tabela de referências na coluna Before.
- 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)
- 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 |
- |