A distribuição faz parte do diagnóstico
Num serviço fictício de pagamentos, quase todas as operações estão liquidadas e uma pequena parte precisa de revisão. A equipa APS observa uma consulta lenta sobre a fila de revisão. Começa por identificar o SQL, os valores pesquisados, a PDB e a janela afetada. Uma tabela com dois estados não implica duas populações iguais. No laboratório original, 10 000 linhas dividem-se em 100 REVIEW e 9 900 SETTLED. Cada montante é 10. O índice sobre STATE existe desde o início. Esta fixture permite isolar a informação estatística: não se acrescentam índices nem se alteram montantes entre as duas medições da consulta rara. A mesma contagem total pode esconder distribuições muito diferentes.
Estimar não é contar as linhas devolvidas
Depois de recolher estatísticas com SIZE 1, a coluna tem dois valores distintos e nenhum histograma. Para esta igualdade simples, o plano estima 5 000 linhas, correspondentes a 10 000 divididas por dois. A execução completa processa 100 linhas na operação de acesso à tabela. O desvio é de cinquenta vezes. O resultado final de SUM é uma única linha contendo 1 000: essa linha agregada não é a cardinalidade da operação que lê os pagamentos. Regista o identificador da operação ao comparar estimativas e observações. A fórmula uniforme explica este exemplo controlado; não a apliques automaticamente a joins, valores nulos, predicados combinados ou consultas com informação estatística adicional.
O histograma representa uma diferença relevante
A segunda recolha usa a mesma tabela e pede um histograma apenas para STATE. A metadata mostra FREQUENCY, dois valores distintos e dois buckets. Com dados e índice inalterados, uma nova consulta identificável estima 100 linhas para REVIEW e a execução observa 100. Para SETTLED, a estimativa é 9 900 e a observação também. O plano raro passou de FULL para acesso por índice e ROWID; o plano amplo conservou FULL. São resultados observados em Oracle Free 26ai, repetidos em dois esquemas sintéticos. Um histograma melhora a representação da distribuição relevante, mas não garante um índice, um tempo de resposta ou o mesmo plano em todos os ambientes.
Tratar a recolha como uma alteração operacional
Recolher estatísticas pode alterar planos posteriores, mesmo sem mudar as linhas funcionais. Num fecho de fundos, combina o âmbito com a equipa de base de dados e o dono do serviço: tabela, colunas, horário, consultas representativas, comportamento esperado e recuperação da configuração anterior. O laboratório usa amostra de 100% e no_invalidate=false para tornar a sequência explícita numa tabela pequena e descartável. Esses parâmetros não são uma recomendação para todas as tabelas bancárias. Uma recolha global pode aumentar custo e afetar consultas fora do incidente. Mantém a intervenção limitada à hipótese investigada e guarda evidência suficiente para comparar antes e depois, incluindo a distribuição que motivou a decisão.
Aceitar resultados em vez de escolher um plano favorito
A aceitação deve incluir valores raros e frequentes, resultados funcionais equivalentes e consumo de recursos dentro do contexto acordado. No exercício, as somas continuam a ser 1 000 e 99 000, e o total permanece 100 000. Isto demonstra preservação dos dados sintéticos, não reconciliação de um serviço financeiro real. Não transformes FULL num erro por definição: recuperar quase toda a tabela pode justificar esse caminho. Também não declares sucesso só porque E-Rows coincide com A-Rows; a aplicação pode continuar a esperar noutro ponto. Fecha a investigação com o efeito no prazo do lote, consultas afetadas, métricas comparáveis e limitações. Relaciona este tema com predicados, planos executados e gestão de alterações.
-- Disposable lab only; full sampling and immediate invalidation are deliberate here.
BEGIN
DBMS_STATS.GATHER_TABLE_STATS(ownname=>USER,tabname=>'PAYMENTS',
estimate_percent=>100,method_opt=>'FOR ALL COLUMNS SIZE 1 FOR COLUMNS STATE SIZE 254',
cascade=>TRUE,no_invalidate=>FALSE);
END;
/
SELECT histogram,num_distinct,num_buckets FROM user_tab_col_statistics
WHERE table_name='PAYMENTS' AND column_name='STATE';Sem histograma: E-Rows 5 000, A-Rows 100. Com histograma: E-Rows 100, A-Rows 100, mantendo a soma 1 000.
Armadilhas comuns
Confundir NDV com frequências iguais; medir a linha agregada em vez do acesso; recolher toda a base; aceitar apenas o caso raro.
Tópicos relacionados: Estatísticas do otimizador · Diagnóstico de desempenho · Aceitação operacional de alterações
Usa a distribuição observada para explicar a estimativa e valida a alteração com resultados e carga representativos.
Referência: Histograms · 1Z0-183 public objectives inspected 2026-09-30; revision date not published