Valor padrão do parâmetro _small_table_threshold no Oracle

O parâmetro oculto _small_table_threshold define o tamanho máximo (em blocos) que uma tabela pode ter para que suas varreduras completas utilizme o buffer cache do Oracle. Tabelas maiores que esse limite tendem a usar leitura direta (direct path read) em operações de full table scan serializadas.

Fórmula de cálculo do valor padrão

O Oracle calcula o valor padrão automaticamente com base no tamanho do buffer cache:

_small_table_threshold = Tamanho do Buffer Cache (em bytes) / (5 × Tamanho do Bloco)

Em outras palavras, o limite equivale a 1/5 do buffer cache medido em blocos.

Valores típicos para diferentes configurações

A tabela abaixo mostra exemplos comuns para blocos de 8 KB:

Buffer Cache Limiar (blocos) Limiar (MB)
512 MB 12.800 ~100
1 GB 25.600 ~200
2 GB 51.200 ~400
4 GB 102.400 ~800
8 GB 204.800 ~1.600
16 GB 409.600 ~3.200

Exemplo de cálculo

Considere um buffer cache de 2 GB e bloco de 8 KB:

_small_table_threshold (blocos) = (2 × 1024 × 1024 × 1024) / (5 × 8 × 1024)
                                = 2.147.483.648 / 40.960
                                = 52.428 blocos
Equivalente em megabytes: 52.428 × 8 KB = 409,6 MB

Comportamento confrome o tamanho da tabela

Tamanho da tabela Comportamento em full table scan
Menor que o limiar Utiliza buffer cache (armazena blocos no cache)
Maior que o limiar Pode optar por leitura direta (direct path read), evitando o buffer cache

Relação com o parâmetro _serial_direct_read

_serial_direct_read Efeito
AUTO (padrão) Usa o limiar de _small_table_threshold para decidir
TRUE Sempre utiliza leitura direta (independente do limiar)
FALSE Sempre utiliza buffer cache

Atenções

  • _small_table_threshold é um parâmetro oculto — alterações devem ser feitas com cuidado e somente sob orientação do suporte Oracle.
  • Conslutas paralelas não são afetadas por esse limite; elas sempre usam leitura direta.
  • O comportamento real também depende de fatores como pressão no buffer cache, histórico de varreduras e outras configurações do sistema.

Exemplo de configuração atual do banco

Parâmetro Valor
SGA_TARGET 8000M
PGA_AGGREGATE_TARGET 3000M
DB_BLOCK_SIZE 8192

Com um buffer cache estimado em ~5 GB (60‑70% do SGA_TARGET), o limiar de _small_table_threshold fica próximo de 1 GB (aproximadamente 128.000 blocos de 8 KB).

Tags: Oracle _small_table_threshold banco de dados buffer cache

Publicado em 6-15 18:22 por Thomas