← Administração Oracle: recuperação, desempenho e produção
14 / 15 · 70 MIN

Cardinalidade, distribuição e estatísticas

Relaciona a distribuição dos dados com as estimativas e prepara uma alteração de estatísticas com critérios de aceitação.

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';
NA PRÁTICA

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

Leva esta ideia contigo

Usa a distribuição observada para explicar a estimativa e valida a alteração com resultados e carga representativos.

Criar conta

Referência: Histograms · 1Z0-183 public objectives inspected 2026-09-30; revision date not published

Oracle® é uma marca registada da Oracle e/ou das suas afiliadas. A dr.pt é uma plataforma de preparação independente e não está afiliada, associada, patrocinada, autorizada nem aprovada por Oracle. Os conteúdos e as perguntas são originais, não são perguntas oficiais de exame, e concluir os nossos testes não atribui nem garante qualquer certificação. Os nomes são usados apenas para identificar o tema. Todas as outras marcas pertencem aos respetivos titulares.