Utilisation de la mise en mémoire tampon adaptative

La mise en mémoire tampon adaptative est une nouvelle fonctionnalité du pilote Microsoft SQL Server 2005 JDBC version 1.2 conçue pour extraire tout type de données de grande valeur sans la charge mémoire associée aux curseurs côté serveur.

Normalement, lorsque le pilote JDBC Microsoft SQL Server 2005 exécute une requête, il extrait tous les résultats du serveur dans la mémoire d'application. Bien que cette approche réduise la consommation des ressources sur l'ordinateur SQL Server, elle peut lever une exception OutOfMemoryError dans l'application JDBC pour les requêtes qui produisent des résultats très grands.

Pour permettre aux applications de gérer des résultats très grands, le pilote Microsoft SQL Server 2005 JDBC version 1.2 fournit la mise en mémoire tampon adaptative. Un développeur d'applications peut souhaiter utiliser la mise en mémoire tampon adaptative avec une instruction pour les raisons suivantes :

  • La requête produit un jeu de résultats très grand : l'application peut exécuter une instruction SELECT qui produit davantage de lignes que l'application ne peut stocker en mémoire. Dans les versions précédentes, l'application devait utiliser un curseur côté serveur pour éviter une exception OutOfMemoryError. Dans la version 1.2, l'application peut utiliser la mise en mémoire tampon adaptative. Cette fonctionnalité permet d'effectuer un passage en lecture seule avant uniquement d'un jeu de résultats arbitrairement grand sans nécessiter de curseur côté serveur.

  • La requête produit de très grandes colonnes SQLServerResultSet ou de très grandes valeurs de paramètres OUT SQLServerCallableStatement ** :** l'application peut extraire une valeur unique (colonne ou paramètre OUT) trop grande pour être contenue entièrement en mémoire d'application. La mise en mémoire tampon adaptative permet à l'application cliente d'extraire une telle valeur en tant que flux, en utilisant les méthodes getAsciiStream, getBinaryStream, ou getCharacterStream. L'application extrait la valeur de l'ordinateur SQL Server à mesure qu'elle lit à partir du flux.

Définition de la mise en mémoire tampon adaptative

Il existe trois manières par lesquelles une application peut demander à ce que l'exécution d'instructions utilise la mise en mémoire tampon adaptative :

Lorsque de grandes valeurs sont lues une fois à l'aide des méthodes get<Type>Stream et que les colonnes ResultSet et les paramètres OUT CallableStatement sont accédés dans l'ordre retourné par l'ordinateur SQL Server, la mise en mémoire tampon adaptative réduit l'utilisation de la mémoire d'application lors du traitement des résultats. Lors de l'utilisation de la mise en mémoire tampon adaptative :

  • Les méthodes get<Type>Stream définies dans les classes SQLServerResultSet et SQLServerCallableStatement retournent des flux à lecture unique par défaut, bien que les flux puissent être réinitialisés s'ils sont marqués par l'application. Si l'application souhaite effectuer un reset du flux, elle doit d'abord appeler la méthode mark sur ce flux.

  • Les méthodes get<Type>Stream définies dans les classes SQLServerClob et SQLServerBlob retournent des flux qui peuvent toujours être repositionnés à la position de départ du flux sans appeler la méthode mark.

Lorsque l'application utilise la mise en mémoire tampon adaptative, les valeurs extraites par les méthodes get<Type>Stream peuvent être extraites une seule fois. Si vous essayez d'appeler toute méthode get<Type> sur la même colonne ou le même paramètre après avoir appelé la méthode get<Type>Stream du même objet, une exception est levée avec le message « Un utilisateur a accédé aux données et elles ne sont pas disponibles pour cette colonne ou ce paramètre ».

Réduction de l'utilisation de la mémoire d'application

Les développeurs doivent respecter les recommandations importantes suivantes afin de réduire l'utilisation de la mémoire par l'application :

  • Évitez d'utiliser la propriété de chaîne de connexion selectMethod=cursor pour permettre à l'application de traiter un jeu de résultats très grand. La fonctionnalité de mise en mémoire tampon adaptative du pilote Microsoft SQL Server 2005 JDBC version 1.2 permet aux applications de traiter de très grands jeux de résultats avant uniquement en lecture seule sans utiliser de curseur côté serveur.

  • Lisez les grandes valeurs texte ou binaires en tant que flux en utilisant les méthodes getAsciiStream, getBinaryStream, ou getCharacterStream au lieu des méthodes getBlob ou getClob. Dans la version 1.2, la classe SQLServerCallableStatement fournit de nouvelles méthodes get<Type>Stream dans ce but.

  • Assurez-vous que les colonnes avec des valeurs potentiellement grandes sont placées en dernier dans la liste de colonnes dans une instruction SELECT et que les méthodes get<Type>Stream du SQLServerResultSet sont utilisées pour accéder aux colonnes dans l'ordre dans lequel elles sont sélectionnées.

  • Assurez-vous que les paramètres OUT avec des valeurs potentiellement grandes sont déclarés en dernier dans la liste de paramètres dans le SQL utilisé pour créer le SQLServerCallableStatement. De plus, assurez-vous que les méthodes get<Type>Stream du SQLServerCallableStatement sont utilisées pour accéder aux paramètres OUT dans l'ordre dans lequel ils sont déclarés.

  • Évitez d'exécuter simultanément plusieurs instructions sur la même connexion. L'exécution d'une autre instruction avant le traitement des résultats de l'instruction précédente peut provoquer la mise en mémoire tampon des résultats non traités dans la mémoire d'application.

Voir aussi

Autres ressources

Amélioration des performances et de la fiabilité avec le pilote JDBC