Loading Now

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:

  1. Adaptive Memory Grants
  2. PSPO
  3. OPPO
  4. 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.
  1. 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/

  1. 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/

  1. 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/

  1. 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/
  2. 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/

  1. 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/
  2. 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/
  3. 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/
  4. 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:

Sandro Servino is a senior IT professional with over 30 years of experience in technology, having worked as a Developer, Project Manager (acting as a Requirements Analyst and Scrum Master), Professor, IT Infrastructure Team Coordinator, IT Manager, and Database Administrator. He has been working with Database technologies since 1996 and has been vendor-certified since the early years of his career. Throughout his professional journey, he has combined deep technical expertise with leadership, education, and consulting experience in mission-critical environments. Sandro has trained more than 20,000 students in database technologies, helping professionals build strong foundations and advance their careers in data platforms and database administration. He has delivered corporate training programs for multiple companies and served as a university professor teaching Database and Data Administration for over five years. For many years, he worked as an independent consultant specializing in SQL Server, providing strategic and technical support for complex database environments. He has extensive experience in troubleshooting and resolving critical issues in SQL Server production environments, including performance tuning, high availability, disaster recovery, security, and infrastructure optimization. His academic background includes: Postgraduate Degree in School Education MBA in IT Governance Master’s Degree in Knowledge Management and Information Technology Currently, Sandro works as a Database Administrator for multinational companies in Europe, managing enterprise-level SQL Server environments and supporting large-scale, high-demand infrastructures. Areas of Expertise SQL Server (Administration, Performance, HA/DR, Troubleshooting) Azure SQL Databases MySQL Oracle PostgreSQL Power BI Data Analytics Data Warehouse Windows Server Oracle Linux Server Ubuntu Linux Server DBA Training and Mentorship Business Continuity and Disaster Recovery Strategies Courses and Training Programs Sandro delivers professional training programs focused on the formation of DBAs and Data/BI Analysts, covering: SQL Server and Azure SQL Databases MySQL Oracle PostgreSQL Power BI Data Analytics Data Warehouse Windows Server Oracle Linux Server Ubuntu Linux Server With a unique combination of technical depth, academic knowledge, real-world consulting experience, and international exposure, Sandro Servino brings practical, results-driven expertise to database professionals and organizations seeking reliability, performance, and resilience in their data platforms.

Post Comment