Notre application MS Access avec des tables liées à SQL Server 2005 est lente lors de l'utilisation de l'authentification Windows à partir de clients Windows XP.MS Access 2003 + tables liées à SQL Server 2005 + Windows Authentification = lent
Nous l'avons exécuté avec succès en utilisant l'authentification SQL Server, mais maintenant nous voulons passer à l'authentification Windows pour un meilleur contrôle de la sécurité.
Configuration:
- serveur de base de données: Windows 2003 Server, SQL Server 2005 SP2
- Client: Windows XP SP3, pilote ODBC SQL Server v2000.85.1132.00
- d'application MS Access: MS Access 2003
- chaîne de connexion:
DRIVER=SQL Server;SERVER=[server name];Connect Timeout=300;Trusted Connection=True;APP=Microsoft Office 2003;WSID=[server name];DATABASE=[db name]
- Seul le protocole réseau TCP/IP est activé sur le serveur.
La lenteur ne pas se produire dans ces situations:
- App sur le serveur DB, l'authentification SQL Server
- App sur le serveur DB, l'authentification Windows
- App sur le client Windows XP, Authentification SQL Server
- SQL Server Management Studio sur le client, Authentification Windows - J'ai effectué un petit test en exécutant 15 requêtes dans SQL MS. Cela s'est passé rapidement et n'a provoqué aucun événement de connexion/déconnexion dans le journal des événements de sécurité sur le serveur.
J'ai analysé la lenteur à l'aide de profils SQL Server et le journal des événements sur le serveur et il semble se résumer à ceci:
- L'application exécute une requête
- Une nouvelle connexion SQL Server est ouvert (visible dans SQL Server Profiler)
- L'identité de l'utilisateur est vérifiée (visible dans le journal des événements de sécurité sur le serveur, un événement de connexion/déconnexion se produit). Cela prend plusieurs centaines de millisecondes.
- La requête est exécutée sur SQL Server
- Les résultats sont renvoyés à Access
Cela se produit pour chaque requête. Certains des formulaires exécutent + - 10 requêtes lors de l'affichage d'un nouvel enregistrement (mise à jour de sous-formulaires, chargement de valeurs pour les combos, etc.). Cela entraîne des performances très lentes.
Bien sûr, la configuration d'une nouvelle connexion à SQL Server pour chaque requête n'est pas nécessaire et la réutilisation des connexions peut résoudre le problème. J'ai cherché des informations sur la façon de s'assurer qu'Access/ODBC effectue correctement la mise en commun des connexions. J'ai trouvé ces articles MS KB:
Frequently Asked Questions About ODBC Connection Pooling
How to Enable Connection Pooling in an ODBC Application
J'ai essayé d'appeler la fonction SQLSetEnvAttr de la forme principale de l'application d'accès, mais cela n'a pas amélioré les résultats.
Toute aide est grandement appréciée.
Vous pouvez également vérifier que vous n'avez pas de problèmes DNS avec le client résolvant le nom du contrôleur de domaine qui effectue l'authentification. J'ai constaté que les problèmes de DNS peuvent être la cause de toutes sortes de problèmes étranges avec Access/ODBC/SQL Server qui ne semblent pas liés. –
Je pense que Fenton est sur la bonne voie. L'application frontale s'exécute-t-elle dans un domaine/une forêt différent de l'instance SQL Server? – JohnFx
Pouvez-vous poster votre chaîne de connexion? S'il te plait, obfusce tes valeurs locales. :) –