Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo mostra como avaliar a precisão das estatísticas do PDW de uma tabela do PDW ou de todas as tabelas em um banco de dados do PDW com base na contagem total de linhas.
Versão original do produto: SQL Server 2012 Parallel Data Warehouse (APS), SQL Server 2008 R2 Parallel Data Warehouse
Número original do KB: 3046875
Resumo
Este artigo contém uma consulta para comparar a contagem real de linhas e a contagem de linhas nas estatísticas do Parallel Data Warehouse para uma tabela específica ou para todas as tabelas no banco de dados atual. Se os valores de contagem de linhas forem muito diferentes, o Parallel Data Warehouse não terá estatísticas precisas para essa tabela. Isso pode fazer com que o otimizador do Parallel Data Warehouse escolha operações e movimentações de dados que não são eficientes e que podem causar longos tempos de execução de consulta.
Mais informações
Execute a seguinte consulta para mostrar uma comparação entre a contagem real de linhas e a contagem de linhas CTL exibida nas estatísticas do Parallel Data Warehouse:
SELECT db_name() as [Database],
pdwtbl.name as [Table],
Sum(part.rows)/ max(pdwpart.partition_number)/8 AS CMP_ROW_COUNT,
sum(pdwpart.rows)/max(size.distribution_id)/max(pdwpart.partition_number)/8 AS CTL_ROW_COUNT
FROM sys.pdw_nodes_partitions part
JOIN sys.pdw_nodes_tables tbl
ON part.object_id = tbl.object_id
AND part.pdw_node_id = tbl.pdw_node_id
JOIN sys.pdw_distributions size
on size.pdw_node_id = tbl.pdw_node_id
JOIN sys.pdw_table_mappings map
ON map.physical_name = tbl.name
JOIN sys.tables pdwtbl
ON pdwtbl.object_id = map.object_id
JOIN sys.partitions pdwpart
ON pdwpart.object_id = pdwtbl.object_id
join sys.pdw_table_distribution_properties dist
on pdwtbl.object_id = dist.object_id
WHERE dist.distribution_policy = 2
-- uncomment the below if you are looking for row counts for a specific table
-- this table will also need to be added below
-- and pdwtbl.name = 'table_name'
GROUP BY pdwtbl.name
UNION ALL
SELECT db_name() as [Database],
pdwtbl.name,
Sum(part.rows)/ sum(pdwpart.partition_number) AS CMP_ROW_COUNT,
sum(pdwpart.rows) /max(pdwpart.partition_number) /(select count(type) from sys.dm_pdw_nodes
where type = ''' + 'COMPUTE' + ''')
AS CTL_ROW_COUNT
FROM sys.pdw_nodes_partitions part
JOIN sys.pdw_nodes_tables tbl
ON part.object_id = tbl.object_id
AND part.pdw_node_id = tbl.pdw_node_id
JOIN sys.pdw_table_mappings map
ON map.physical_name = tbl.name
JOIN sys.tables pdwtbl
ON pdwtbl.object_id = map.object_id
JOIN sys.partitions pdwpart
ON pdwpart.object_id = pdwtbl.object_id
join sys.pdw_table_distribution_properties dist
on pdwtbl.object_id = dist.object_id
where dist.distribution_policy = 3
-- uncomment the below if you are looking for row counts for a specific table
-- this table will also need to be added below
-- and pdwtbl.name = 'table_name'
GROUP BY pdwtbl.name
Observação
- Essa consulta avalia apenas as contagens de linhas e não a cardinalidade. Também requer que as estatísticas de nível do Parallel Data Warehouse existam em pelo menos uma coluna da tabela. Ele não leva em conta se as estatísticas existem em mais de uma coluna ou para qual coluna as estatísticas existem.
- O valor de contagem padrão no Parallel Data Warehouse é de 1.000 linhas. Se nenhuma estatística do Data Warehouse Paralelo tiver sido criada, um valor de 1000 será retornado para a contagem de linhas CTL.