Je me trouve dans la situation suivante :
- .net 3.5 WinForm client app accédant à SQL Server 2008
- Certaines requêtes renvoyant des quantités relativement importantes de données sont utilisées assez souvent par un formulaire.
- Les utilisateurs utilisent SQL Express en local et redémarrent leurs machines au moins une fois par jour.
- D'autres utilisateurs travaillent à distance sur des connexions réseau lentes.
Le problème est qu'après un redémarrage, la première fois que les utilisateurs ouvrent ce formulaire, les requêtes sont extrêmement lentes et prennent plus ou moins 15 secondes à s'exécuter sur une machine rapide. Par la suite, les mêmes requêtes ne prennent que 3 secondes. Bien sûr, cela est dû au fait qu'aucune donnée n'est mise en cache et qu'elle doit d'abord être chargée à partir du disque.
Ma question :
Serait-il possible de forcer le chargement préalable des données requises dans le cache du serveur SQL ?
Note
Ma première idée était d'exécuter les requêtes en arrière-plan au démarrage de l'application, de sorte que lorsque l'utilisateur démarre le formulaire, les requêtes soient déjà mises en cache et s'exécutent rapidement directement. Cependant, je ne veux pas charger le résultat des requêtes sur le client car certains utilisateurs travaillent à distance ou ont des réseaux lents.
J'ai donc pensé à exécuter les requêtes à partir d'une procédure stockée et à placer les résultats dans des tables temporaires afin que rien ne soit renvoyé.
Il s'est avéré que certains des ensembles de résultats utilisent des colonnes dynamiques, de sorte que je n'ai pas pu créer les tables temporaires correspondantes et que ce n'est donc pas une solution.
Avez-vous une autre idée ?