Eu notei algo que eu não tenho certeza. pode ser que executar consultas diretamente com SSMS seja muito mais rápido do que executar consultas com SQLCMD? Percebi que os resultados das consultas executadas com o SSMS são gravados muito mais rapidamente no disco.
Quais são as diferenças?
Obrigado.
As diferenças provavelmente se devem a
SET
configurações, comoSET ARITHABORT
. O que acontece é que essas configurações são levadas em consideração na hora de decidir o plano a ser usado e, às vezes, você pode ficar preso a um plano muito ruim com uma configuração (e isso provavelmente aconteceu porque esse aplicativo usava parâmetros não ideais) e o oposto configuração tem um bom plano.Você pode descobrir quais configurações estão em jogo verificando sys.dm_exec_requests e sys.dm_exec_sessions quando a consulta estiver em execução. O último tem colunas para várias configurações (mas você terá que descobrir o session_id do primeiro). Depois de descobrir as diferenças, você pode definir manualmente a configuração para a configuração "melhor" do sqlcmd e esperar que agora obtenha o plano melhor. Ou você pode simplesmente emitir
WITH RECOMPILE
para evitar o problema de detecção de parâmetro em primeiro lugar.Um recurso realmente útil para ler com atenção é:
Lento no Aplicativo, Rápido no SSMS?