Utilisation des instructions et des jeux de résultats

Télécharger le pilote JDBC

Quand vous travaillez avec le Pilote Microsoft JDBC pour SQL Server et les objets Statement et ResultSet qui l’accompagnent, il existe plusieurs techniques que vous pouvez utiliser pour améliorer les performances et la fiabilité de vos applications.

Utilisez l'objet d'instruction approprié

Quand vous utilisez l’un des objets Statement du pilote JDBC, par exemple l’objet SQLServerStatement, SQLServerPreparedStatement ou SQLServerCallableStatement, vérifiez que vous utilisez l’objet approprié pour la tâche.

  • Si vous ne disposez pas de paramètres OUT, vous n'avez pas à utiliser l'objet SQLServerCallableStatement. Utilisez plutôt l’objet SQLServerStatement et SQLServerPreparedStatement.
  • Si vous n'avez pas l'intention d'exécuter l'instruction plus d'une fois ou si vous ne disposez ni de paramètres IN ni de paramètres OUT, vous n'avez pas à utiliser l'objet SQLServerCallableStatement ou SQLServerPreparedStatement. Utilisez plutôt l’objet SQLServerStatement.

Utilisez l'accès simultané approprié aux objets ResultSet

Ne demandez pas un mode de concurrence modifiable lorsque vous créez des instructions SQL produisant des ensembles de résultats, sauf si vous avez réellement l’intention de modifier les résultats. Le modèle de curseur par défaut, en lecture seule et en avant uniquement, est le plus rapide pour la lecture de petits jeux de résultats.

Limitez la taille de vos jeux de résultats

Envisagez d’utiliser la méthode setMaxRows (ou SET ROWCOUNT la syntaxe SELECT TOP N SQL) pour limiter le nombre de lignes retournées à partir de jeux de résultats potentiellement volumineux. Si vous devez gérer des jeux de résultats volumineux, songez à utiliser une mise en mémoire tampon adaptative des réponses en définissant la propriété de chaîne de connexion responseBuffering=adaptive, qui est le mode par défaut. Cette approche permet à l'application de traiter des jeux de résultats volumineux sans nécessiter de curseurs côté serveur ; par ailleurs, elle réduit l'utilisation de la mémoire de l'application. Pour plus d’informations, voir Utilisation de la mise en mémoire tampon adaptative.

Utilisez la taille d'extraction appropriée

Pour les curseurs côté serveur en lecture seule, il est nécessaire de choisir entre de nombreux allers-retours vers le serveur ou l'utilisation d'une grande quantité de mémoire dans le pilote. Pour les curseurs de serveurs pouvant être mis à jour, la taille d'extraction influence également la sensibilité des modifications au jeu de résultats et à l'accès simultané du serveur. Les mises à jour des lignes dans le tampon d’extraction actuel ne sont pas visibles tant qu’une méthode explicite refreshRow n’a pas été lancée ou que le curseur n’a pas quitté le tampon d’extraction. Les tampons de récupération de grande taille offrent de meilleures performances (moins d’allers-retours avec le serveur), mais ils sont moins sensibles aux modifications et réduisent la concurrence sur le serveur si CONCUR_SS_SCROLL_LOCKS (1009) est utilisé. Pour une sensibilité maximale aux modifications, utilisez une taille d'extraction de 1. Cependant, ce paramètre provoquera un aller-retour au serveur pour chaque ligne extraite.

Optimisations du chemin de lecture par ensemble de résultats

À partir de la version 13.6, le pilote réduit les allocations temporaires lors de la lecture des ensembles de résultats et utilise des chemins rapides pour les valeurs de chaîne courantes, DECIMAL, NUMERIC, MONEY et SMALLMONEY. Ces optimisations sont automatiques et peuvent réduire la pression sur le ramasse-miettes pour les ensembles de résultats volumineux et comportant de nombreuses colonnes. Aucune configuration d’application n’est requise.

Utilisez des flux pour les paramètres IN importants

Utilisez des flux ou des BLOB et des CLOB matérialisés de manière incrémentielle pour traiter la mise à jour d'importantes valeurs de colonne ou l'envoi d'importants paramètres IN. Le pilote JDBC envoie ces types au serveur en plusieurs allers-retours, ce qui vous permet de définir et de mettre à jour des valeurs plus importantes que ce que la mémoire peut contenir.