Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2016 (13.x) e versões posteriores
Ao migrar de uma versão mais antiga do SQL Server para o SQL Server 2014 (12.x) ou versões posteriores e atualizar o nível de compatibilidade do banco de dados para o mais recente disponível, uma carga de trabalho pode estar exposta ao risco de regressão de desempenho. Isso também é possível em menor grau ao atualizar entre o SQL Server 2014 (12.x) e qualquer versão mais recente.
No SQL Server 2014 (12.x) e versões posteriores, todas as alterações do otimizador de consulta são limitadas ao nível de compatibilidade de banco de dados mais recente, portanto, os planos de execução não são alterados no momento da atualização, mas sim quando um usuário altera a COMPATIBILITY_LEVEL opção de banco de dados para a mais recente disponível. Para obter mais informações sobre as alterações do otimizador de consulta introduzidas no SQL Server 2014 (12.x), consulte Estimativa de cardinalidade (SQL Server). Para obter mais informações sobre os níveis de compatibilidade e como eles podem afetar as atualizações, consulte Níveis de compatibilidade e atualizações do mecanismo de banco de dados.
Esse recurso de seleção fornecido pelo nível de compatibilidade do banco de dados, em combinação com o Repositório de Consultas, oferece um ótimo nível de controle sobre o desempenho da consulta no processo de atualização, se a atualização seguir o fluxo de trabalho recomendado visto no diagrama a seguir. Para obter mais informações sobre o fluxo de trabalho recomendado para atualizar o nível de compatibilidade, consulte Alterar o nível de compatibilidade do banco de dados e usar o Repositório de Consultas.
Esse controle sobre atualizações foi aprimorado com o SQL Server 2017 (14.x), onde o ajuste automático foi introduzido e permite automatizar a última etapa no fluxo de trabalho recomendado.
A partir do SQL Server Management Studio v18, o recurso QTA (Assistente de Otimização de Consulta) orienta os usuários pelo fluxo de trabalho recomendado para manter a estabilidade de desempenho durante atualizações para versões mais recentes do SQL Server, conforme documentado na seção Manter estabilidade de desempenho durante a atualização para o SQL Server mais recente de cenários de uso do repositório de consultas. No entanto, o QTA não reverte para um bom plano previamente conhecido, como visto na última etapa do fluxo de trabalho recomendado. Em vez disso, o QTA rastreia quaisquer regressões encontradas na vista
Importante
O QTA não gera carga de trabalho do usuário. Se estiver executando o QTA em um ambiente que não é usado por seus aplicativos, certifique-se de que você ainda possa executar a carga de trabalho de teste representativa no Mecanismo de Banco de Dados do SQL Server de destino por outros meios.
O fluxo de trabalho do Assistente de Ajuste de Consulta
O ponto de partida do QTA pressupõe que um banco de dados de uma versão anterior do SQL Server seja movido (por meio de Anexar um Banco de Dados ou Instruções RESTORE) para uma versão mais recente do Mecanismo de Banco de Dados do SQL Server e que o nível de compatibilidade do banco de dados anterior à atualização não seja alterado imediatamente. O QTA guia-o através das seguintes etapas:
Configure o Repositório de Consultas de acordo com as configurações recomendadas para a duração da carga de trabalho (em dias) definida pelo usuário. Pense na duração da carga de trabalho que corresponde ao seu ciclo de negócios típico.
Solicite o início da carga de trabalho necessária, para que o Repositório de Consultas possa recolher uma linha de base dos dados da carga de trabalho, caso ainda não estejam disponíveis.
Atualize para o nível de compatibilidade do banco de dados de destino escolhido pelo usuário.
Solicite que uma segunda passagem de dados de carga de trabalho seja coletada para comparação e deteção de regressão.
Percorra quaisquer regressões encontradas com base na visualização de Query Store Regressed Queries, experimente, coletando estatísticas de tempo de execução sobre possíveis permutações das variações de modelos otimizadores aplicáveis, e avalie o resultado.
Informe sobre as melhorias medidas e, opcionalmente, permita que essas alterações persistam usando guias de plano.
Para obter mais informações sobre como anexar um banco de dados, consulte Anexar e desanexar banco de dados.
O diagrama a seguir mostra como o QTA altera apenas as últimas etapas do fluxo de trabalho recomendado para atualizar o nível de compatibilidade usando o Repositório de Consultas visto anteriormente. Em vez de escolher entre o plano de execução atualmente ineficiente e o último plano de execução válido, o QTA apresenta opções de ajuste que são específicas para as consultas regredidas selecionadas, para criar um novo estado melhorado com planos de execução ajustados.
QTA Otimizando o espaço de pesquisa interno
O QTA visa apenas consultas SELECT que podem ser executadas pelo Repositório de Consultas. As consultas parametrizadas são elegíveis se o parâmetro compilado for conhecido. As consultas que dependem de construções de tempo de execução, como tabelas temporárias ou variáveis de tabela, não são qualificadas no momento.
O QTA tem como alvo possíveis padrões conhecidos de regressões de consulta devido a alterações nas versões do SQL Server (Cardinality Estimation ). Por exemplo, ao atualizar um banco de dados do SQL Server 2012 (11.x) e do nível de compatibilidade do banco de dados 110, para o SQL Server 2017 (14.x) e o nível de compatibilidade do banco de dados 140, algumas consultas podem regredir porque foram projetadas especificamente para funcionar com a versão do CE existente no SQL Server 2012 (11.x) (CE 70). Isso não significa que reverter do CE 140 para o CE 70 seja a única opção. Se apenas uma alteração específica na versão mais recente estiver introduzindo a regressão, então é possível sugerir que a consulta use apenas a parte relevante da versão anterior do CE que estava funcionando melhor para a consulta específica, enquanto ainda usa todas as outras melhorias das versões mais recentes do CE. E também permitir que outras consultas que não regrediram na carga de trabalho se beneficiem das mais recentes melhorias do CE.
Os padrões CE pesquisados pelo QTA são:
Independência versus correlação: se a suposição de independência fornecer melhores estimativas para a consulta específica, a dica
USE HINT ('ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES')de consulta fará com que o SQL Server gere um plano de execução usando seletividade mínima ao estimarANDpredicados para filtros para levar em conta a correlação. Para obter mais informações, consulte USE HINT query hints e versões do CE.Contenção simples vs. contenção de base: se uma contenção de junção diferente fornecer melhores estimativas para a consulta específica, a dica
USE HINT ('ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS')de consulta fará com que o SQL Server gere um plano de execução usando a suposição de contenção simples em vez da suposição de contenção de base padrão. Para obter mais informações, consulte USE HINT query hints e versões do CE.Estimativa de cardinalidade fixa da função com valor de tabela de múltiplas instruções (FVMT) de 100 linhas vs. 1 linha: Se a estimativa fixa padrão para FVMTs de 100 linhas não resultar em um plano mais eficiente do que ao usar a estimativa fixa para FVMTs de 1 linha (correspondente ao padrão no modelo CE do otimizador de consultas do SQL Server 2008 R2 (10.50.x) e versões anteriores), nesse caso, a dica de consulta
QUERYTRACEON 9488é usada para gerar um plano de execução. Para obter mais informações sobre MSTVFs, consulte Criar funções definidas pelo usuário (Mecanismo de Banco de Dados).
Como último recurso, se as dicas de escopo estreito não estiverem produzindo resultados bons o suficiente para os padrões de consulta qualificados, o uso completo do CE 70 também será considerado, usando a dica de consulta USE HINT ('FORCE_LEGACY_CARDINALITY_ESTIMATION') para gerar um plano de execução.
Importante
Qualquer dica força determinados comportamentos que podem ser abordados em futuras atualizações do SQL Server. Recomendamos que aplique sugestões apenas quando não existir outra opção e planeie revisitar o código com sugestões em cada nova atualização. Ao forçar comportamentos, você pode estar impedindo que sua carga de trabalho se beneficie dos aprimoramentos introduzidos em versões mais recentes do SQL Server.
Iniciar o Assistente de Ajuste de Consulta para atualizações de banco de dados
QTA é um recurso baseado em sessão que armazena o estado da sessão no esquema msqta do banco de dados do usuário onde uma sessão é criada pela primeira vez. Várias sessões de ajuste podem ser criadas em um único banco de dados ao longo do tempo, mas apenas uma sessão ativa pode existir para qualquer banco de dados.
Criar uma sessão de atualização de banco de dados
No SQL Server Management Studio, abra o Pesquisador de Objetos e conecte-se ao Mecanismo de Banco de Dados.
Para o banco de dados que pretende atualizar o nível de compatibilidade, clique com o botão direito do rato no nome do banco de dados, selecione Tarefas, selecione Atualização de Banco de Dadose selecione Nova Sessão de Atualização de Banco de Dados.
Na janela do Assistente de QTA, duas etapas são necessárias para configurar uma sessão:
Na janela de Configuração, configure o Repositório de Consultas para capturar o equivalente a um ciclo comercial completo de dados de carga de trabalho para analisar e ajustar.
Insira a duração esperada da carga de trabalho em dias (o mínimo é de 1 dia). Isso é usado para propor configurações recomendadas do Repositório de Consultas para permitir provisoriamente que toda a linha de base seja coletada. A captura de uma boa linha de base é importante para garantir que todas as consultas regredidas encontradas após a alteração do nível de compatibilidade do banco de dados possam ser analisadas.
Defina o nível de compatibilidade do banco de dados de destino pretendido no qual o banco de dados do usuário deve estar, após a conclusão do fluxo de trabalho QTA.
Depois de concluir, selecione Avançar.
Na janela Configurações , duas colunas mostram o estado atual do Repositório de Consultas no banco de dados de destino e as Configurações recomendadas .
As configurações recomendadas são selecionadas por padrão, mas selecionar o botão de rádio na coluna Atual aceita as configurações atuais e também permite ajustar mais precisamente a configuração atual do Repositório de Consultas.
A configuração proposta do Limite de Consulta Obsoleta é o dobro do valor de duração esperado da carga de trabalho, medido em dias. Isso ocorre porque o Repositório de Consultas precisa conter informações sobre a carga de trabalho de linha de base e a carga de trabalho de atualização pós-banco de dados.
Depois de concluir, selecione Avançar.
Importante
O Tamanho Máximo proposto é um valor arbitrário que pode ser adequado para uma carga de trabalho de tempo curto. No entanto, pode ser insuficiente manter informações sobre as cargas de trabalho na linha de base e pós-atualização do banco de dados para cargas de trabalho intensivas; ou seja, quando muitos planos diferentes podem ser gerados. Se você antecipar que esse será o caso, insira um valor mais alto que seja apropriado.
A janela Tuning conclui a configuração da sessão e fornece instruções sobre as próximas etapas para abrir e prosseguir com a sessão. Depois de concluir, selecione Concluir.
Executar o fluxo de trabalho de atualização do banco de dados
Para a base de dados que se destina a atualizar o nível de compatibilidade da base de dados, clique com o botão direito sobre o nome da base de dados, selecione Tarefas, selecione Atualização da Base de Dados, e selecione Monitorizar Sessões.
A página de gestão de sessões lista as sessões atuais e passadas do banco de dados em questão. Selecione a sessão desejada e selecione Detalhes.
Observação
Se a sessão atual não estiver presente, selecione o botão Atualizar.
A lista contém as seguintes informações:
ID de sessão
Nome da Sessão: Nome gerado pelo sistema composto pelo nome do banco de dados, data e hora da criação da sessão.
Status: Status da sessão (Ativa ou Fechada).
Descrição: Gerado pelo sistema, composto pelo nível de compatibilidade do banco de dados de destino selecionado pelo utilizador e pelo número de dias para a carga de trabalho do ciclo de negócios.
Hora de início: Data e hora de quando a sessão foi criada.
Observação
Excluir sessão exclui todos os dados armazenados para a sessão selecionada. No entanto, excluir uma sessão fechada não exclui nenhum guia de plano implantado anteriormente. Se for eliminada uma sessão que implantou guias de plano, não será possível usar o QTA para reverter. Em vez disso, procure guias de planos usando a tabela do sistema sys.plan_guides e elimine-os manualmente usando sp_control_plan_guide.
O ponto de entrada para uma nova sessão é a etapa Coleta de Dados.
Observação
O botão Sessões retorna à página de gestão de sessões, mantendo a sessão ativa como está.
Esta etapa tem três subetapas:
Coleta de Dados da Linha de Base solicita ao utilizador que execute o ciclo representativo de carga de trabalho, para que o Repositório de Consultas possa coletar uma linha de base. Quando essa carga de trabalho for concluída, marque a Opção de execução concluída com a carga de trabalho e selecione Avançar.
Observação
A janela QTA pode ser fechada enquanto a carga de trabalho é executada. O retorno à sessão que permanece em estado ativo em um momento posterior é retomado da mesma etapa em que foi interrompido.
Atualizar banco de dados solicita permissão para atualizar o nível de compatibilidade do banco de dados para o destino desejado. Para prosseguir para a próxima subetapa, selecione Sim.
A página a seguir confirma que o nível de compatibilidade do banco de dados foi atualizado com êxito.
A Coleta de Dados Observados solicita que o usuário execute o ciclo de carga de trabalho representativo novamente, para que o Repositório de Consultas possa coletar uma linha de base comparativa usada para procurar oportunidades de otimização. À medida que a carga de trabalho é executada, use o botão Atualizar para continuar atualizando a lista de consultas regredidas, se alguma for encontrada. Altere o valor de Consultas a mostrar para limitar o número de consultas exibidas. A ordem da lista é afetada pelo Métrico (Duração ou CpuTime) e pela Agregação (A média é o padrão). Selecione também quantas Consultas mostrar. Quando essa carga de trabalho for concluída, marque a opção Concluído com a execução da carga de trabalho e selecione Avançar.
A lista contém as seguintes informações:
ID de consulta
Texto de consulta: Transact-SQL instrução que pode ser expandida selecionando o botão ....
Executa: Exibe o número de execuções dessa consulta para toda a coleção de carga de trabalho.
Métrica da Linha de Base: A métrica selecionada (duração ou tempo de CPU) em ms para a coleta de dados da linha de base antes da atualização de compatibilidade da base de dados.
Métrica Observada: A métrica selecionada (Duration ou CpuTime) em milissegundos para a recolha de dados após a atualização de compatibilidade da base de dados.
% Alterar: Alteração percentual da métrica selecionada entre os estados de compatibilidade do banco de dados antes e depois da atualização. Um número negativo representa a quantidade de regressão medida para a consulta.
Ajustável: Verdadeiro ou Falso dependendo da elegibilidade da consulta para experimentação.
O View Analysis permite selecionar quais consultas experienciar para encontrar oportunidades de otimização. A valor de consultas para mostrar passa a ser o âmbito das consultas que são elegíveis para experimentação. Depois que as consultas desejadas estiverem marcadas, selecione Próximo para iniciar a experimentação.
As consultas com Tunable definido como Falso não podem ser selecionadas para experimentação.
Importante
Um prompt informa que, uma vez que o QTA passe para a fase de experimentação, não seja possível retornar à página View Analysis. Se você não selecionar todas as consultas qualificadas antes de passar para a fase de experimentação, precisará criar uma nova sessão posteriormente e repetir o fluxo de trabalho. Isso requer a redefinição do nível de compatibilidade do banco de dados para o valor anterior.
Ver Resultados permite selecionar as consultas às quais aplicar a otimização proposta como um guia de planos.
A lista contém as seguintes informações:
ID de consulta
Texto de consulta: Transact-SQL instrução que pode ser expandida selecionando o botão ....
Status: Exibe o estado de experimentação atual da consulta.
Métrica da Linha de Base : A métrica selecionada (Duração ou CpuTime) em ms para a consulta conforme executada na Etapa 2 Subetapa 3, representandoa consulta regressada após a atualização de compatibilidade do banco de dados. Métrica Observada: A métrica selecionada (Duration ou CpuTime) em ms para a consulta após a experimentação, para uma otimização proposta suficientemente boa.
% Alteração: Especifica a alteração percentual para a métrica selecionada entre o estado de experimentação antes e depois, representando a quantidade de melhoria medida para a consulta com a otimização proposta.
Opção de consulta: Link para a dica proposta que melhora a métrica de execução da consulta.
Pode implantar: True ou False dependendo se a otimização de consulta proposta pode ser implementada como um guia de planos.
Verificação mostra o estado de implementação de consultas previamente selecionadas para esta sessão. A lista nesta página difere da página anterior ao alterar a coluna Can Deploy para Can Rollback. Esta coluna pode ser True ou False dependendo de se é possível reverter a otimização de consulta implementada e remover o seu guia de plano.
Se, posteriormente, houver necessidade de reverter uma otimização proposta, selecione a consulta relevante e selecione Reversão. O guia de plano de consulta é removido e a lista é atualizada para excluir a consulta que foi revertida. Observe na imagem abaixo que a consulta 8 foi removida.
Observação
A exclusão de uma sessão fechada não exclui nenhum guia de plano implantado anteriormente. Se for eliminada uma sessão que implantou guias de plano, não será possível usar o QTA para reverter. Em vez disso, procure guias de planos usando a tabela do sistema sys.plan_guides e elimine-os manualmente usando sp_control_plan_guide.
Permissões
Requer a associação à função db_owner.
Conteúdo relacionado
- Níveis de Compatibilidade e Upgrades do Mecanismo de Banco de Dados
- Ferramentas de monitoramento e ajuste de desempenho
- Monitorar o desempenho usando o Repositório de Consultas
- Alterar o nível de compatibilidade do banco de dados e usar o Repositório de Consultas
- Definir sinalizadores de rastreamento com DBCC TRACEON (Transact-SQL)
- USE dicas de consulta HINT
- Estimativa de cardinalidade (SQL Server)
- Ajuste automático
- Usar o Assistente de Otimização de Consulta do SQL Server