Nous utilisons Entity Framework 5.0.0, première approche de base de données. J'ai importé deux fonctions ITVF (Inline Table-Value) en ligne dans mon EDMX qui renvoient des IQueryable. Une fois retourné, nous faisons le plus souvent un certain type d'opérations sur eux, comme .Skip(). Take()Performances des fonctions EF et table
La performance est bonne, pour quelques heures au moins. Sans rien faire (au moins ce que je sais), la performance se dégrade pendant la nuit.
Dans un premier temps, la requête prendra environ 500 ms à exécuter. Au cours de la nuit, les performances se dégradent à un niveau où la requête renvoie une exception Timeout (30-60secondes). Cela ne se produit lorsque la fonction de table est exécutée à partir du code, comme:
IQueryable<MyResult> results =
_context.MyTableFunction("searchforthis")
.Skip(currentPagingPosition*20).Take(20);
(Ce n'est pas la première fois que nous courons la requête que cela se produit)
Si nous courons cependant la même fonction de table direcly de SQL Server Management Studio, la requête s'exécutera dans ~ 500ms.
Si je « Resave » la fonction de table comme:
ALTER FUNCTION [dbo].[MyTableFunction]......
sans faire des changements « réels », il va instantanément d'être 500ms rapide, même lorsqu'il est appelé à partir du code.
Ai-je manqué quelque chose d'évident, des idées?
reniflement des paramètres. [Lent dans l'application, rapide dans SSMS? Comprendre les performances des mystères] (http://www.sommarskog.se/query-plan-mysteries.html) –
Les problèmes de performances se manifestent-ils par une utilisation élevée de l'unité centrale/de la mémoire à partir de l'application? –
duplication possible de [sql s'exécute rapidement dans ssms lent dans asp.net] (http://stackoverflow.com/questions/10175422/sql-runs-fast-in-ssms-slow-in-asp-net) –