Share via


Compreendendo imposição de plano

A dica de consulta USE PLAN pode ser usada para forçar o otimizador de consulta a usar um plano de consulta especificado para uma consulta. Essa dica de consulta aceita o plano de consulta que você deseja usar no formato XML como um argumento. USE PLAN pode ser usada para consultas cujos planos levam a tempos de execução lentos, mas que você sabe que existem planos mais adequados. Um cenário comum pode envolver consultas que foram bem executadas em uma versão anterior do SQL Server, mas que têm uma execução precária com uma versão atualizada, seja essa atualização um service pack ou uma atualização de versão completa. Geralmente, uma atualização gera um desempenho melhor ou igual na maioria dos tempos de execução de consulta; porém, pode haver algumas exceções. A dica de consulta USE PLAN está disponível para tratar casos nos quais se prefere um plano de consulta selecionado pelo otimizador de consulta em uma versão de produto anterior a um plano selecionado depois da atualização.

A dica de consulta USE PLAN pode ser usada com guias de plano quando você estiver solucionando problemas de desempenho precário de consultas em aplicativos implantados. Guias de plano são usados para aplicar dicas de consulta a consultas quando você não pode ou não deseja alterar o aplicativo diretamente. Para obter mais informações sobre guias de plano, consulte Otimizando consultas em aplicações implantadas com guias de plano. Para obter cenários mais detalhados que mostram como a dica de consulta USE PLAN pode ser aplicada em guias de plano, consulte Cenário de imposição de plano: criar um guia de plano que especifica um plano de consulta e Cenário de imposição de plano: criar um guia de plano para impor um plano obtido de uma consulta regravada.

A imposição de plano pode ser usada para a maioria dos tipos de consultas. Isso inclui consultas em tabelas, índices clusterizados e não-clusterizados, exibições indexadas e tabelas e índices particionados. USE PLAN pode ser especificada com as instruções INSERT, UPDATE, MERGE ou DELETE da linguagem de manipulação de dados (DML) . Observe que alterações no esquema de banco de dados, como a adição ou eliminação de um índice, podem invalidar o plano especificado na dica USE PLAN. Quando USE PLAN é especificada diretamente em uma consulta, um plano inválido faz com que a consulta falhe. Quando USE PLAN é especificada em um guia de plano, um plano inválido não fará com que a consulta falhe; entretanto, o plano será compilado sem usar a dica e poderá não ser a melhor opção. Quando a dica USE PLAN é usada dentro de um guia de plano, você pode usar a função sys.fn_validate_plan_guide para verificar a validade do plano. Com base nos resultados da função, você pode optar por descartar o guia de plano e redefinir a consulta ou modificar o design do banco de dados. Por exemplo, você pode recriar o índice especificado no guia de plano.

Planos de consulta gerados com a dica de consulta USE PLAN são armazenados em cache como outros planos de consulta.

Limitações da imposição de plano

A imposição de plano limita uma consulta a um único plano de execução estático. Essa imposição não permite que o otimizador de consulta se adapte às alterações de tamanhos de dados e distribuições, índices novos e outras variáveis. Portanto, se for usada de forma incorreta, a imposição de plano poderá gerar problemas de desempenho. A imposição de plano deve ser usada somente depois de se ter explorado completamente outras opções para melhorar o desempenho da consulta, como estatísticas novas e precisas e índices otimizados. Essa imposição deve ser usada com moderação e somente pelos administradores e desenvolvedores de banco de dados experientes, com conhecimento acerca de questões de desempenho e do ambiente variável de seus bancos de dados e aplicativos.

Quando você estiver usando a dica de consulta USE PLAN para influenciar a compilação de uma consulta em um aplicativo implantado, a dica deverá ser usada em um guia de plano em vez de ser incorporada diretamente ao aplicativo. Assim, é possível lidar com as seguintes armadilhas:

  • Você pode alterar ou remover a dica sem modificar ou recompilar o aplicativo. Em casos restritos, é possível que uma dica USE PLAN aplicada a uma versão do SQL Server não se aplique a um lançamento futuro de service pack ou versão. Portanto, você pode ter de alterar ou remover uma dica USE PLAN depois que um aplicativo tiver sido implantado.

  • O uso de uma dica grande diretamente na consulta pode ser evitado. Isso facilita a leitura da consulta.

    Observação importanteImportante

    Ao criar um guia de plano que use USE PLAN durante os testes, verifique se a consulta, cujo plano você deseja impor, normalmente é enviada a uma solicitação de cursor. Planos de consulta para consultas baseadas em cursor diferem dos planos para consultas que não se baseiam no cursor. Portanto, para criar um guia de plano que especifique uma dica USE PLAN que se aplique a uma consulta enviada com uma solicitação de cursor, o guia de plano deve especificar um plano de cursor. Para obter mais informações, consulte Usando a dica de consulta USE PLAN em consultas com cursores.

A imposição de plano não oferece suporte aos seguintes tipos de consultas:

  • Consultas com cursores dinâmicos, controlados por conjunto de chaves e de somente avanço. Cursores estáticos e de somente avanço rápido têm suporte. Para obter mais informações, consulte Usando a dica de consulta USE PLAN em consultas com cursores.

  • Consultas distribuídas.

  • Consultas de texto completo.