Eu tenho um procedimento armazenado que leva cerca de 3 a 5 segundos que estou tentando entender, então quero um plano de execução para ele. Quando eu o executo no SQL Server Management Studio com o Plano de Execução ativado, leva mais de 15 minutos e, em seguida, recebo uma guia que diz "Plano de Execução", mas a guia está vazia. Qualquer outra tentativa de executar qualquer SQL (mesmo select * from foo
) não funcionará mais. Eu tenho um aplicativo de estúdio de gerenciamento do servidor SQL quebrado, devo desligá-lo e tentar novamente. Eu fiz isso três vezes e perdi 45 minutos, e agora estou pronto para aprender sobre algumas alternativas.
Primeiro, existe uma maneira confiável de linha de comando para gerar um SQLPLAN
arquivo para um script sql específico, talvez a partir da linha de comando, e então eu poderia investigar o uso de alguma outra ferramenta além do SSMS para gerar meus planos.
Em segundo lugar, se não houver uma maneira de linha de comando confiável integrada para gerar e armazenar um plano de execução SQL como texto ou XML, gostaria de saber se existem outras ferramentas de terceiros que fariam um bom trabalho em SQLPlans muito grandes, em particular não engasgando e morrendo quando as partes de desenho da GUI ficam sobrecarregadas.
O que você faz quando o SSMS não gera e mostra um plano de execução? Estou usando o SQL 2008 R2 Standard e sua versão SSMS incluída e não tenho nenhum plug-in extra.
Atualização Estou invocando um procedimento armazenado que cria um cursor, que faz subconsultas e faz muito mal, em um loop, gerando mais de 10 mil instruções de subconsultas individuais. Parece que eu realmente preciso refatorar isso para gerar menos uma tempestade de saída.
Update2 Realmente se parece com o rastreamento do lado do servidor (para zerar as áreas problemáticas) e, em seguida, um retorno à criação de perfil e, em seguida, um retorno aos planos de consulta pode ser necessário. Estou ampliando muito o zoom em uma imagem grande e preciso diminuir um pouco o zoom.
Você já deu uma olhada no SentryOne Plan Explorer ? Ele pode lidar com planos enormes que o Management Studio engasga. Você também pode gerar planos reais e estimados de dentro da ferramenta, para que nem precise se preocupar com o SSMS.
Experimente
SET STATISTICS XML ON
antes de executar sua consulta. Isso retornará o plano no formato XML sem tentar renderizá-lo no SSMS. Você pode então copiar e colar o texto em um arquivo. A partir daí, você obterá o plano em formato XML e poderá abri-lo em uma ferramenta como o SQL Sentry Plan Explorer .Já aconteceu isso de vez em quando. A opção de SET STATISTICS XML ON conforme mencionado acima é provavelmente a melhor resposta (além de usar um terceiro). No entanto, descobri que executar o SSMS no próprio servidor pode ajudar. Dito isso, se você está travando o SSMS em sua caixa local, provavelmente não é uma boa ideia experimentá-lo no servidor.
Outra coisa que você pode fazer é consultar o cache do plano para ver quais planos de execução estão no cache para esse proc com uma consulta semelhante a esta:
Outra coisa que eu sempre faço - antes mesmo de olhar para um plano de execução, é SET STATISTICS IO ON e depois rodar o proc/code. Se estou satisfeito com o resultado de SET STATISTICS IO ON, é provável que tenha um plano de que goste. http://msdn.microsoft.com/en-us/library/ms184361.aspx