KB974006 - SQL Server query optimizer hotfix trace flag 4199 modelo de manutenção

Aplica-se A
Microsoft SQL Server 2005 Standard Edition Microsoft SQL Server 2005 Enterprise Edition Microsoft SQL Server 2005 Standard X64 Edition Microsoft SQL Server 2005 Enterprise X64 Edition Microsoft SQL Server 2005 Developer Edition Microsoft SQL Server 2005 Workgroup Edition SQL Server 2008 Standard SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Workgroup SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Express SQL Server 2008 R2 Standard SQL Server 2008 R2 Workgroup SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Express SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Express - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

INTRODUÇÃO

Versões do Microsoft SQL Server posteriores a SQL Server 2000 Service Pack 3 (SP3) entregaram a maioria dos hotfixes para o otimizador de consulta em um estado off-by-default para evitar que os clientes de produção existentes vejam as alterações de plano esperadas que poderiam causar regressões de desempenho. No início, cada hotfix foi entregue sob um sinalizador de rastreamento separado. Mais tarde, esta prática foi alterada de modo que a maioria das bandeiras foram combinadas sob uma única bandeira de rastreamento (4199). Esta nova prática foi iniciada em várias versões, a partir das seguintes atualizações:

  • Atualização Cumulativa 6 do SQL Server 2005 Service Pack 3 (SP3)
  • SQL Server 2008 Service Pack 1 (SP1) Pacote de atualizações cumulativas 7
  • SQL Server 2008 R2 (RTM)

O sinalizador de rastreamento 4199 foi usado para coletar hotfixes que deveriam se tornar ativados por padrão em uma versão futura, enquanto outros sinalizadores de rastreamento foram usados para situações em que uma correção não deveria se tornar ativada por padrão na forma atual. A partir do SQL Server 2016 RTM, a configuração de COMPATIBILITY_LEVEL do banco de dados será usada para habilitar o sinalizador de rastreamento 4199 hotfixes relacionados a 4199 por padrão. Este artigo descreve a mecânica e a política de como os hotfixes que afetam o plano serão entregues para o SQL Server 2016 e versões posteriores.

Mais Informações

No SQL Server 2016, os hotfixes do sinalizador de rastreamento 4199 que são feitos em versões anteriores do SQL Server ficarão habilitados no banco de dados COMPATIBILITY_LEVEL 130 sem o sinalizador de rastreamento 4199 habilitado. O sinalizador de rastreio 4199 será utilizado para lançar quaisquer correções futuras do SQL Server 2016 para bases de dados utilizando o nível de compatibilidade 130. Como o sinalizador de rastreamento 4199 é recomendado apenas para clientes que estão enfrentando problemas de desempenho específicos, os clientes são aconselhados a remover o sinalizador de rastreamento 4199 depois de migrarem seus bancos de dados para o nível de compatibilidade mais recente, pois o sinalizador de rastreamento 4199 será reutilizado para correções futuras que podem não se aplicar ao seu aplicativo e podem causar alterações inesperadas no desempenho do plano em um sistema de produção. Isto significa que diferentes correções do sinalizador de rastreio 4199 estão ativadas para cada nível de compatibilidade suportado numa determinada versão do produto. O nível de compatibilidade mais recente já ativa todas as correções anteriores no sinalizador de rastreio 4199. Isto significa que atualizar uma base de dados para o nível de compatibilidade mais recente e remover o sinalizador de rastreio 4199 ainda permite todas as correções que uma carga de trabalho estava a utilizar antes da atualização da base de dados, mas não novas correções. Se, posteriormente, os clientes tiverem problemas de desempenho de consulta, experimente ativar a opção de escopo de banco de dados QUERY_OPTIMIZER_HOTFIXES ou ENABLE_QUERY_OPTIMIZER_HOTFIXES de dica de consulta em um ambiente de teste para determinar se os problemas foram resolvidos. Consulte a documentação sobre QUERY_OPTIMIZER_HOTFIXES.

Observação Por predefinição, as bases de dados criadas no SQL Server 2016 utilizam o nível de compatibilidade 130 e já têm a nova lógica de otimização ativada.

A principal vantagem deste modelo é que ele reduz o risco para os sistemas de produção durante o processo de atualização. Esta abordagem separa a instalação de uma nova versão principal do SQL Server da ativação automática de todas as novas alterações do processador de consultas. Como as atualizações de versão principais alteram o formato de arquivo e não são reversíveis, é uma boa ideia usar a configuração COMPATIBILITY_LEVEL, pois isso permite que um cliente faça rapidamente o downgrade se for encontrado um problema inesperado de desempenho do plano durante uma atualização. Se um cliente encontrar uma alteração de plano inesperada que bloqueie uma atualização de aplicativo, ele pode facilitar a situação aplicando uma dica de plano apropriada usando o Query Store para forçar o plano anterior, ou pode facilitar a situação entrando em contato com o Suporte ao Cliente da Microsoft para ajudar com o problema para fornecer uma solução alternativa ou hotfix. Quando todos os problemas forem atenuados, a atualização pode continuar. Os clientes devem integrar esta capacidade no seu planeamento de atualização para o SQL Server 2016.

A tabela seguinte explica o modelo para como o sinalizador de rastreio 4199 irá funcionar a partir do SQL Server 2016.

Definição Nível de compatibilidade SQL Sinalizador de rastreio 4199 Correções do otimizador anteriores ao SQL Server 2016 RTM Correções do otimizador após o SQL Server 2016 RTM
1. 120 Off Partilhar Partilhar
2. 120 Ativado Ativado Partilhar
3. 130 Off Ativado pelo nível de compatibilidade Partilhar
4. 130 Ativado Ativado pelo nível de compatibilidade Ativado pelo nível de compatibilidade

Nota: a definição n.º 3 é recomendada para clientes com atualizações recentes para o SQL Server 2016.

Para versões principais após SQL Server 2016, a Microsoft planeja continuar usando esse modelo de manutenção para hotfixes do otimizador. Por padrão, ou a cada versão, qualquer rastreamento sinalizar 4199 hotfixes da versão anterior será habilitado no próximo nível de compatibilidade. Isto significa que o estado recomendado para os clientes após migrarem para o nível de compatibilidade mais recente será ter o sinalizador de rastreio 4199 desativado. Hotfixes posteriores usariam o sinalizador de rastreamento 4199 para habilitar correções para clientes que precisam habilitar esses hotfixes específicos em um aplicativo. Os clientes são aconselhados a desativar o sinalizador de rastreamento 4199 depois que um aplicativo é atualizado para o nível de compatibilidade mais recente para evitar que futuras alterações inesperadas do otimizador sejam ativadas inesperadamente em um aplicativo. Essa atualização para o nível de compatibilidade mais recente e a remoção do sinalizador de rastreamento 4199 ainda permite todas as correções que uma carga de trabalho estava aproveitando antes da atualização, mas não novas correções.

Observação Embora muitos hotfixes do otimizador estejam habilitados no sinalizador de rastreamento 4199, alguns usam outros sinalizadores de rastreamento. Sinalizador de rastreio 4199 Historicamente abrangiam sinalizadores de rastreio que são amplamente aplicáveis e que provavelmente serão ativados por predefinição numa versão futura. Os sinalizadores de rastreio alternativos são utilizados em correções em que as condições são muito específicas de apenas alguns clientes, em que a correção pode causar regressões de desempenho noutros tipos de aplicações ou em que a funcionalidade interna pode sofrer alterações antes de estar pronta para ser ativada para todos. A Microsoft continuará a utilizar outros sinalizadores de rastreio conforme necessário para prestar assistência ao produto.

Observação Este artigo concentra-se no modelo para lançar hotfixes de rastreamento sinalizador 4199 no nível de compatibilidade mais recente do produto mais recente. (No momento da publicação, isto é SQL Server 2016.) As correções do Otimizador podem ser lançadas em versões mais antigas no mercado do SQL Server ou em níveis de compatibilidade inferiores (120 ou anteriores) do SQL Server 2016. A Microsoft avaliará cada caso e determinará se deve utilizar o sinalizador de rastreio 4199 ou um sinalizador de rastreio diferente. Uma vez que as alterações sem correção também são ativadas quando é efetuada uma mudança para um nível de compatibilidade posterior, não existe nenhuma promessa específica de que não ocorrerão alterações nos planos durante uma atualização (com ou sem o sinalizador de rastreio 4199). Os clientes devem sempre testar cuidadosamente as alterações ao nível de compatibilidade para aplicações de produção e devem utilizar tecnologias de mitigação, como o Arquivo de Consultas, se existir um problema de desempenho relacionado com a escolha do plano.

Para referência, os seguintes sinalizadores de rastreamento foram usados para hotfixes do processador de consulta antes da introdução do sinalizador de rastreamento 4199:

4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110, 4111, 4115, 4116, 4117, 4119, 4120, 4121, 4122, 4124, 4125, 4126, 4127, 4128, 4129, 4131, 4133, 4135.

SQL Server 2012 e versões posteriores

O sinalizador de rastreio 4199 está incluído nas versões de lançamento do SQL Server 2012 e versões posteriores.

Como ativar o sinalizador de rastreio 4199

Pode ativar o sinalizador de rastreio 4199 no arranque ou numa sessão de utilizador. Este sinalizador de rastreio tem um efeito a nível global ou ao nível da sessão. Para habilitar o sinalizador de rastreamento 4199, use o comando DBCC TRACEON ou use –T 4199 como parâmetro de inicialização.

Se for utilizado DBCC: TRACEON\TRACEOFF, não será gerado um novo plano em cache para procedimentos armazenados. Os planos poderiam estar em cache e criados sem o sinalizador de rastreamento.

Para obter informações detalhadas sobre como ativar ou desativar sinalizadores de rastreio e para obter explicações sobre sinalizadores de rastreio globais e ao nível da sessão, consulte os seguintes tópicos nos SQL Server Manuais Online:

Referências

Para obter mais informações sobre o esquema de nomenclatura para atualizações SQL Server, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:

822499
Novo esquema de nomenclatura para pacotes de atualização de software do Microsoft SQL Server
Para obter mais informações sobre a terminologia de atualização de software, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:

824684
Descrição da terminologia padrão utilizada para descrever as atualizações de software da Microsoft