SQL Timeout a expiré pour une requête de 2 secondes

Le problème est que j'ai une procédure stockée qui s'exécute de manière cohérente dans Sql Server Management Server avec un timeout de 2 secondes, mais lors de l'appel de cette même procédure stockée à partir du code, il expire.

Quand il fonctionne correctement à partir de SSMS, il devrait renvoyer environ 30 lignes.

J'ai essayé plusieurs façons d'appeler la procédure à partir du code mais à chaque fois le même résultat. Cela a récemment commencé à se produire, hier, il fonctionnait bien.

La méthode préférée pour appeler la procédure pour nous utilise Linq2Sql qui donne le message d'erreur suivant:

Le timeout d'attente a expiré. Le timeout d'expiration s'est écoulé avant la fin de l'opération ou le server ne répond pas. Description: Une exception non gérée s'est produite lors de l'exécution de la requête Web en cours. Veuillez consulter la trace de la stack pour plus d'informations sur l'erreur et son origine dans le code.

Détails d'exception: System.Data.SqlClient.SqlException: Expiration du timeout. Le timeout d'expiration s'est écoulé avant la fin de l'opération ou le server ne répond pas.

Erreur de source:

Line 16: public IMultipleResults GetTournamentRatingNonComplaintData([global::System.Data.Linq.Mapping.ParameterAtsortingbute(DbType = "DateTime")] System.Nullable<System.DateTime> startdate, [global::System.Data.Linq.Mapping.ParameterAtsortingbute(DbType = "DateTime")] System.Nullable<System.DateTime> enddate, [global::System.Data.Linq.Mapping.ParameterAtsortingbute(DbType = "Int")] System.Nullable<int> officialSportID, [global::System.Data.Linq.Mapping.ParameterAtsortingbute(DbType = "Char(1)")] System.Nullable<char> gender, [global::System.Data.Linq.Mapping.ParameterAtsortingbute(DbType = "Int")] System.Nullable<int> level) Line 17: { Line 18: IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), startdate, enddate, officialSportID, gender, level); Line 19: return ((IMultipleResults)(result.ReturnValue)); Line 20: } 

Est-ce que quelqu'un sait quelles sont les différences entre l'exécution dans SSMS et à travers le code? Que peut-on faire pour résoudre ce problème?

Votre connection à partir de SQL Management Studio peut être configurée différemment de la string de connection que vous utilisez à partir de .NET.

Par exemple, voir les options définies par défaut dans SQL Management Studio devises / Options / Exécution de requête / SQL Server / Advanced.

Je suppose que certains parameters différents entre les deux environnements causent votre problème. Pour déboguer, vous devez essayer de configurer SQL Server Management Studio de sorte qu'il utilise la même configuration que votre string de connection .NET avant d'exécuter votre SP.

Ou bien, ajoutez des instructions SET à votre requête .NET pour configurer toutes les options que vous voyez configurées dans Management Studio.

Ce n'est pas toujours facile de find le réglage qui est différent – dans mon expérience, une cause commune est différente des parameters ANSI.

Est-ce une procédure stockée? Dans SSMS, avez-vous exécuté la procédure stockée ou seulement la requête? Je suis tombé sur Parameter Sniffing en SQL qui pourrait provoquer une longue procédure de Store en cours d'exécution. Paramètre reniflant Google et vous findez l'option sur la façon de l'éviter. Son assignant le paramètre à une variable locale dans SP et les utilisant à la place des parameters réels