Bonjour,
J'ai un problème de performances sur une requête SQL. Le plan d'exécution m'indique que le bon index est pris et que je peux difficilement l'optimiser plus que cela.
La table fait 1 million d'enregistrement. Le serveur est un quadri-processeur avec 4Gb de RAM (même si seulement 3,5 Gb sont reconnus ... Windows server 2000).
Cette table contient des données par societe. Les utilisateurs la consultent via une application. En fait, selon que les utilisateurs lancent leur requêtes sur une societé, la première exécution est très longue (environ 5/6 minutes pour une dizaine d'enregistrements). Mais s'ils la relancent dans la foulée, c'est rapide (car les données sont dans le buffer cache). Mais si quelqu'un d'autre le lance sur une autre socièté, le buffer cache est vidé, et rebelotte pour la deuxième société. Et cela tout le long de la journée.
En traçant la requête, je me rend compte que c'est le sp_cursorfetch qui est très long. (en lançant la requête dans un analyseur de requête, elle met une vingtaine de secondes). C'est l'utilisation des curseurs qui plombe l'appli.
Une des solutions à la quelle j'ai pensé serait (si c'est possible) de forcer la table dans le buffer cache d'office (comme l'on pourrait le faire avec les tables bufferisées sous Oracle). Mais serait-ce raisonnable (edit : personnellement je ne pense pas ...) pour une table d'un million d'enregistrements ? Si c'est faisable, comment faire ?
Partager