Je rencontre un problème lors du remplissage d'un jeu d'enregistrements ADO dans VB6. La requête (SQLServer 2008) ne prend que 1 seconde à courir quand je l'utilise avec SSMS. Cela fonctionne bien lorsque le jeu de résultats est petit, mais quand il s'agit de quelques centaines d'enregistrements, cela prend beaucoup de temps. Plus de 800 enregistrements nécessitent environ 5 minutes pour retourner (la requête ne prend que 1 seconde dans le SSMS), et 6000+ prend bien plus de 20 minutes. J'ai "fixé" l'exception en augmentant le délai d'expiration de la commande, mais je me demandais s'il y avait un moyen de le faire fonctionner plus vite car il ne semble pas que la requête réelle demande autant de temps. Quelque chose comme la compression des résultats, cela ne prend pas autant de temps. Le jeu d'enregistrements est ouvert comme suit:Résolution d'un problème de délai d'attente ADO dans VB6
myConnection.CommandTimeout = 2000
myConnection.ConnectionString = "Provider=SQLOLEDB;" & _
"Initial Catalog=DB_NAME;" & _
"Data Source=SERVER_NAME" & _
"Network Library=DBMSSOCN;" & _
"User ID=USER_NAME;" & _
"Password=PASSWORD;" & _
"Use Encryption for Data=True;"
myConnection.Open
myRecordSet.Open STORED_PROC_QUERY_STRING, myConnection, adOpenStatic, adLockReadOnly
Set myRecordSet.ActiveConnection = Nothing
myConnection.Close
Les données retournent 3 colonnes utilisées pour remplir une zone de liste modifiable. J'ai exécuté SQL Profiler, et les instances de l'ordinateur client effectuent plus de lectures et prennent plus de temps d'un facteur 100 que les deux métriques pour les requêtes dans SSMS. Le texte de la requête est le même pour SSMS et la machine client selon le profileur, donc je ne pense pas qu'il devrait utiliser un plan d'exécution différent. Est-ce que la bibliothèque réseau ou le fournisseur peut avoir un impact sur cela?
Statistiques Profiler:
- De l'application cliente: 7041720 lectures, 59458 ms, 3900 ligne compte
- De SSMS: 30802 lectures, 238 ms durée, 3900 rangée compte
Il semble qu'il utilise un plan d'exécution différent, mais la requête est exactement la même et je ne suis pas sûr de savoir comment vérifier le plan d'exécution que le client pourrait utiliser s'il est différent om ce qui est montré dans SSMS.
Avez-vous essayé de supprimer le "Utiliser le cryptage pour les données"? – Andomar
Non, mais ce n'est pas vraiment une option disponible. Ceci est une application client. –
Avez-vous essayé de profiler les appels et [en regardant les plans d'exécution] (http://stackoverflow.com/questions/3831644/why-does-a-database-query-only-go-slow-in-the-application/ 3831685 # 3831685) pour vérifier que ce n'est certainement pas un problème de reniflage des paramètres? –