SQL Server 2025: O Optional Parameter Plan Optimization realmente resolveu o Parameter Sniffing?
Um artigo do Brent Ozar sobre Optional Parameter Plan Optimization (OPPO) no SQL Server 2025 é extremamente importante porque ele mostra uma coisa que muita gente estava esperando há anos:
A Microsoft finalmente começou a atacar o problema clássico de “kitchen sink queries” e Parameter Sniffing com múltiplos parâmetros opcionais.
Mas o ponto mais interessante do artigo não é a feature em si.
É mostrar que, mesmo em 2025, o SQL Server ainda sofre muito com reutilização de plano inadequada.
O que o Brent mostrou na prática
O cenário dele é extremamente comum em sistemas corporativos:
WHERE
(DisplayName = @DisplayName OR @DisplayName IS NULL)
AND
(Location = @Location OR @Location IS NULL)
AND
(WebsiteUrl = @WebsiteUrl OR @WebsiteUrl IS NULL)
Esse padrão aparece em:
- ERPs
- APIs
- filtros avançados
- aplicações .NET
- procedures genéricas
O problema?
O otimizador precisa criar UM plano tentando atender vários cenários diferentes.
E isso é praticamente impossível.
O que o SQL Server 2025 tentou resolver
O SQL Server 2022 já tinha introduzido o PSPO (Parameter Sensitive Plan Optimization).
Agora em 2025 veio o:
- Optional Parameter Plan Optimization (OPPO)
A ideia é excelente:
o SQL Server passa a criar variantes de plano dependendo dos parâmetros utilizados.
Na teoria:
- busca por DisplayName → usa SEEK
- busca por WebsiteUrl → usa outro plano
- busca por Location → outro plano
Seria quase um “multi-plan cache inteligente”.
O grande problema encontrado
O Brent mostrou algo extremamente importante:
O OPPO ainda escolhe “um parâmetro principal” para otimização.
E isso cria um comportamento perigoso:
o primeiro parâmetro executado ainda influencia fortemente os planos seguintes.
Ou seja:
o Parameter Sniffing não morreu.
Ele apenas mudou de forma.
Esse ponto é crítico.
Porque muita gente vai achar que:
“SQL Server 2025 resolveu Parameter Sniffing.”
Não resolveu.
Ele mitigou alguns cenários.
O ponto mais técnico do artigo
O detalhe mais interessante tecnicamente é o aparecimento do:
PLAN PER VALUE
e:
optional_predicate(...)
dentro do plano de execução.
Isso mostra que o otimizador agora:
- tenta segmentar cardinalidades
- cria QueryVariantID diferentes
- mantém múltiplas variantes do plano
Isso aproxima o SQL Server de estratégias usadas há anos em bancos como Oracle com Adaptive Cursor Sharing.
Mas por que ainda falha?
Porque cardinalidade continua sendo o coração do problema.
Se o SQL Server estima:
- 5 linhas
mas encontra: - 10 milhões
o plano escolhido será ruim independentemente da feature.
O artigo mostra exatamente isso:
- scans inesperados
- reutilização errada de QueryVariant
- planos lentos dependendo da ordem de execução
Comparando com outros estudos e discussões
A discussão no Reddit sobre “split personality queries” mostra exatamente o mesmo padrão:
queries com parâmetros opcionais geram planos completamente diferentes dependendo do volume retornado.
E isso reforça algo importante:
O problema não é apenas cache de plano.
É variabilidade de cardinalidade.
Minha análise técnica
A Microsoft claramente está evoluindo o otimizador em etapas:
- Adaptive Memory Grants
- PSPO
- OPPO
- Query Variants
Tudo aponta para um futuro onde o SQL Server terá:
- múltiplos planos simultâneos
- seleção dinâmica baseada em runtime
- cardinalidade adaptativa mais agressiva
Mas hoje?
Ainda estamos longe disso em workloads reais.
Principalmente em:
- procedures gigantes
- filtros opcionais
- sistemas legados
- ORMs
- aplicações multi-tenant
O que continua sendo mais eficiente hoje
Na prática, ainda vemos melhores resultados com:
- OPTION(RECOMPILE)
- dynamic SQL bem escrito
- separação de procedures
- filtros especializados
- Plan Guides
- Query Store Hints
Porque essas abordagens eliminam ambiguidade do otimizador.
O que o artigo deixa implícito
O Brent deixa uma crítica muito clara:
A Microsoft lançou uma v1 funcional.
Mas ainda limitada.
E sinceramente?
Concordo totalmente.
O OPPO parece muito mais uma fundação arquitetural para versões futuras do que uma solução definitiva.
O mais importante para DBAs
O artigo reforça algo que muitos DBAs experientes já sabem:
Não existe feature mágica contra Parameter Sniffing.
Você ainda precisa entender:
- histogramas
- cardinalidade
- seletividade
- distribuição de dados
- plano de execução
- cache de planos
Porque no fim:
o otimizador continua tomando decisões baseado em estimativas.
E estimativa errada continua sendo o maior problema de performance no SQL Server moderno.
Quer entrar na carreira de dados?
Segue Principais Formações:
- Coloque comentário que gostaria de ter acesso aos cursos com desconto.
- AcademiaDBA. Formação Completa para DBA.
Aprenda SQL Server, Oracle, PostgreSQL, MySQL, Data Warehouse, ETL com SSIS/SSAS e Power BI em uma plataforma prática e focada na carreira, criada para ajudar você a se tornar um profissional confiante em banco de dados e dados.
1316 aulas e 412 horas de conteúdo original
Legendas: Portugues
https://formacaodba.academiadba.com/
1.1 DBAcademy. Master Databases.Build a Real Data Career.
Learn SQL Server, Oracle, PostgreSQL, MySQL, Data Warehousing, ETL with SSIS/SSAS, and Power BI in one practical, career-focused platform designed to help you become a confident database and data professional.
1316 class e 412 hours
Subtitles: English, Spain, France
https://dbacademy.academiadba.com/
- Mastering SQL Server – 86 horas: torne-se um DBA SQL Server
Curso Completo de DBA SQL Server: Aprenda do Zero, na Prática, com Azure, Performance, Segurança e Alta Disponibilidade.
https://www.udemy.com/course/servino_sqlserver/
2.1 Dominando scripts PowerShell para o SQL Server
Do básico ao avançado: aprenda PowerShell passo a passo e transforme sua rotina de DBA com automações inteligentes.
https://www.udemy.com/course/dbapowershell/
2.2 Toolkit do DBA SQL Server
Monitoramento com DBADASH, Stress Test com SQLQUERYSTRESS, DBATools e Scripts Essenciais para o DBA SQL Server
https://www.udemy.com/course/toolkitdbasqlserver/
2.3 SQL Server DBA Toolkit
Monitoring with DBADASH, Stress Testing with SQLQUERYSTRESS, DBATools, and Essential Scripts for the SQL Server DBA. In English
https://www.udemy.com/course/sql-server-dba-toolkit/
2.4 Cluster-AG Always ON e Log Shipping no SQL SERVER 2025
Aprenda a configurar ambiente de disaster recovery no SQL Server usando o Cluster com AG Always on e Log Shipping
https://www.udemy.com/course/logshippingsqlserver/
- Curso Postgres Completo, 50 horas – Formação DBA
Aprenda Banco de Dados Postgres, Modelagem de Dados e programação usando SQL – do básico ao avançado
https://www.udemy.com/course/postgrescompleto/
3.1 Cluster Postgres: Domine Clusters Gerenciado pelo Patroni
Aprenda a montar um cluster PostgreSQL robusto no Linux utilizando Patroni, ETCD, HAProxy e Keepalived
https://www.udemy.com/course/clusterpostgres/
3.2 Postgres Cluster: Master Patroni-Managed Clusters
Learn how to build a robust PostgreSQL cluster on Linux using Patroni, ETCD, HAProxy and Keepalived. In English
https://www.udemy.com/course/postgres-cluster/
- Curso ORACLE Completo – 89 horas, formação DBA
Aprenda Banco de Dados Oracle, Modelagem de Dados e programação usando PL/SQL – do básico ao avançado
https://www.udemy.com/course/dbaoracle/ - Curso MySQL Completo – 123 horas, formação DBA
Aprenda MySQL, SQL, Azure MySQL, Modelagem de Dados, Windows Server e Linux Ubuntu Server – do básico ao avançado
https://www.udemy.com/course/mysqlcompleto/
5.1 MySQL Course – 75 Hours, Become a DBA
MySQL Course – 75 hours, DBA training. Learn MySQL / SQL Language – From Basic to Advanced. In English
https://www.udemy.com/course/mysqlcourse/
- Curso Analista de Dados, formação profissional – 52 horas
Aprenda SQL Server, modelagem de dados, Linguagem SQL, SSIS, SSAS, data Warehouse, Stage, Power BI
https://www.udemy.com/course/analistadados/ - Curso PowerBI – Formação Analista de BI – 28 horas
PowerBI, Linguagem SQL e Modelagem de Dados, do básico ao avançado. Se torne um Analista de BI – Business Intelligence
https://www.udemy.com/course/curso-powerbi-completo/ - Guia Completo para a Carreira de DBA
Como conquistar sua primeira vaga como DBA — mesmo começando do zero e evoluir até pleno ou criar seu próprio negócio
https://www.udemy.com/course/guiacarreiradba/ - Analista de Dados: Da Primeira Vaga ao Negócio Próprio
Aprenda a se posicionar, conseguir entrevistas, passar em processos seletivos, trabalhar bem nos primeiros 90 dias
https://www.udemy.com/course/guianalistadados/
Bons Estudos
Prof. Msc Sandro Servino
www.academiadba.com
Share this content:



Post Comment