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).