En essayant d'aider une équipe de développement d'applications avec des problèmes de performances sur un serveur SQL 2000 (à partir d'applications Java sur des serveurs d'applications distincts), j'ai exécuté une trace SQL et découvert que tous les appels étaient complets des instructions API Server Cursor (sp_cursorprepexec, sp_cursorfetch, sp_cursorclose).Connexion JDBC à SQL 2000 très occupé: selectMethod = cursor vs selectMethod = direct?
On dirait qu'ils sont en spécifiant des propriétés de chaîne de connexion qui force l'utilisation de curseurs côté serveur, la récupération seulement 128 lignes de données à la fois: (De http://msdn.microsoft.com/en-us/library/Aa172588)
Lorsque les attributs curseur API ou propriétés sont définies à tout autre que leurs valeurs par défaut, le fournisseur OLE DB pour SQL Server et SQL API utilisation du pilote ODBC serveur serveur curseurs au lieu de résultat par défaut ensembles. Chaque appel à une fonction API qui récupère des lignes génère un aller-retour vers le serveur pour extraire les lignes du curseur du serveur API.
MISE À JOUR: La chaîne de connexion en cause est un paramètre de chaîne de connexion JDBC, selectMethod=cursor
(qui permet aux curseurs côté serveur nous ci-dessus) contre la selectMethod=direct
alternative. Ils utilisent selectMethod=cursor
comme chaîne de connexion standard pour toutes les applications. Du point de vue de ma DBA, c'est juste ennuyeux (ça encombre la trace avec des ordures inutiles), et (je devrais spéculer) se traduit par de nombreux allers-retours de serveur app-to-SQL, réduisant les performances globales.
Ils ont apparemment testé le changement (juste l'un des 60 connexions d'applications différentes) à selectMethod=direct
mais ont connu quelques problèmes (dont je n'ai pas de détails) et sont préoccupés par la rupture de l'application.
Alors, mes questions sont les suivantes:
- peut en utilisant les performances des applications moins
selectMethod=cursor
, comme je l'ai tenté de faire valoir? (en augmentant le nombre d'allers-retours nécessaires sur un serveur SQL qui a déjà des requêtes très élevées/s) selectMethod=
est-il un paramètre transparent à l'application sur une connexion JDBC? Cela pourrait-il casser leur application si nous la changeons? En général, quand utilisercursor
par rapport àdirect
?
Egalement cross-posted to SF.
EDIT: a reçu des détails techniques qui justifient une modification significative du titre, de la question et des balises.
EDIT: Ajout de la prime. Ajout de la prime à la question de SF (cette question est centrée sur le comportement de l'application, la question SF est axée sur la performance SQL.) Merci !!
IIRC, vous avez raison. Cela ressemble à une question ServerFault autant qu'à un SO, cependant. Vous seriez probablement intelligent de demander à http://www.sqlservercentral.com/ aussi. –
Je l'ai mentionné sur la balise #sqlhelp sur twitter. Pas de morsures là non plus. Je pense que c'est considéré comme une mauvaise forme de poster une question sur plusieurs sites SO, n'est-ce pas? – BradC
Ma meilleure estimation serait qu'ils devraient l'essayer. Peut-être qu'ils ont UnitTests qu'ils peuvent déclencher contre la base de données avec la chaîne de connexion modifiée (ou une petite application de test). – Bobby