O Oracle geralmente não sabe que duas sou mais colunas tem relação entre sí. Um exemplo clássico é país e cidade. Ao especificar as duas colunas no where o Oracle vai multiplicar a seletividade das duas colunas para obter uma estimativa sobre a cardinalidade, errando bastante nessa estimativa. Algo para solucionar esses casos é criar …
Mês: novembro 2023
High-Frequency Automatic Optimizer Statistics Collection
Muitos que trabalham com Oracle sabem que ele tem um auto task para coleta de estatística de forma automática todo dia, geralmente de madrugada. Nesse job, o Oracle irá coletar as estatísticas dos objetos que já mudaram pelo menos 10%(dafault). Mas, e se isso não for o suficiente pro meu ambiente? E se as minhas …
Continue lendo High-Frequency Automatic Optimizer Statistics Collection
SQL Plan Directives
Agora, neste post, iremos ver sobre SQL Plan Directives, o último assunto sobre Adaptive Statistics. Mas, o que é Adaptive Statistics? Adaptive Statistics é controlado pelo parâmetro OPTIMIZER_ADAPTIVE_STATISTICS, não na sua totalidade, e tem o objetivo de melhorar os planos de execução e estimativas quando a query tem predicados muito complexos, ou até mesmo a …
Statistics Feedback
No post anterior, falei sobre Dynamic Statistics, que é quando o Oracle lê alguns blocos aleatórios do objeto sendo acessado para melhorar as estimativas de cardinalidade em determinada situações. Esse post pode ser lido aqui. Agora irei falar sobre Statistics Feedback, que é quando o Oracle Optimizer monitora as linhas realmente retornadas com a estimativa …
Dynamic Statistics
Dynamic Statistics, ou Dynamic Sampling como era conhecido antes do Oracle 12, é uma técnica do Oracle para ler certos blocos dos objetos para ter uma estimativa da seletividade da tabela, visto que as estatísticas atuais podem ser insuficientes ou até mesmo inexistentes. Visto que a falta de estatísticas ou predicados complexos, pode fazer o …
Histograms
Já pensou em como o Oracle calcula a estimativa de cardinalidade que uma certa query irá retornar? Bem, vamos testar pra tentar entender. Vamos criar uma tabela e coletar as estatísticas dela: SQL> CREATE TABLE teste_histogram( 2 id NUMBER 3* ); Table TESTE_HISTOGRAM created. SQL> INSERT INTO teste_histogram 2 SELECT level 3 FROM dual 4 …
Index Clustering Factor
Já percebeu que algum plano de execução de alguma query sua resolveu não usar o index e partir para o Full Table Scan e você não entende o por que? A resposta pode ser o Index Clustering Factor! Mas, o que é o Index Clustering Factor? Bem, pra entender isso um pouco melhor, vamos ver …