Si sta utilizzando un ORM che sta eseguendo una chiamata da .NET alla stored procedure sp_executesql di SQL Server.Query SQL lenta da codice .NET, ma non in modo interattivo
Quando il proc memorizzato viene chiamato da .NET, viene ricevuta un'eccezione di timeout.
Guardando Profiler, posso vedere che la query richiede davvero molto tempo per essere eseguita.
la query è essenzialmente:
exec sp_executesql N'SELECT DISTINCT
FROM [OurDatabase].[dbo].[Contract] [LPLA_1]) [LPA_L1]
LEFT JOIN [OurDatabase].[dbo].[Customer] [LPA_L2] ON [LPA_L2].[Customer_ID]=[LPA_L1].[CustomerId] AND [LPA_L2].[Data]=[LPA_L1].[Data])
WHERE ((((([LPA_L1].[DealerId] = @DealerId1))
AND ([LPA_L2].[Last_Name] = @LastName2))))',N'@DealerId1 varchar(18),@LastName2 varchar(25)',@DealerId1='1234',@LastName2='SMITH'
La parte confusa per me è questo: se copio e incollo la query che è timeout in studio di gestione di SQL ed eseguirlo in modo interattivo, esegue bene.
Qualcuno sa perché la stessa query richiederebbe molto più tempo se eseguita tramite codice .NET? (Sono in grado di riprodurlo - la query eseguita dal codice scade costantemente e la query eseguita in modo interattivo funziona in modo coerente.)
Qualsiasi aiuto è apprezzato. Grazie!
Come molte linee di dati stai tornando? Se ci sono migliaia e migliaia di righe, allora potrebbe richiedere del tempo per passare attraverso il filo al computer aspettandosi un risultato. – Miles
La query restituisce molti dati? Esiste un invio di dati tra server e client coinvolti nel caso del programma che non si verifica in modalità interattiva? – quosoo
Tre nel nostro test case. Inoltre, DealerID e Last_Name hanno indici. –