8
votes

Définition et mise à jour du pool de connexion (oracleconnectionpooldaSource) Propriétés de la meilleure performance

Dans une application Web Java, je travaille sur, nous utilisons oracleconnectionpOldAsource pour une fonctionnalité de pool de connexion de base de données. Chaque appel GetConnection inclut l'ID d'Oracle de l'utilisateur et le mot de passe. Donc, chaque utilisateur dans un sens finit par suivre son propre pool de connexion de base de données.

Nous utilisons actuellement les valeurs par défaut pour la plupart des propriétés. Cela inclut

  • minlimit réglé sur 0
  • maxlimit défini sur INTEGER.MAX_VALUE
  • MAXSTATISLIMIT SET sur 0
  • INACTIVITYTIMÉTOUNT SET sur 0
  • TIMETOLIVETIMEOUT SET sur 0
  • AbandonedConnectionTimeout défini sur 0
  • PropertyCheckInterval défini sur 900
  • ConnectewaitTimeOut réglé sur 0

    Plus d'informations sur ces propriétés peuvent être trouvées sur Connexion Propriétés du cache .

    Nous n'avons actuellement aucun problème de connexion de base de données flagrant, mais pensez que la performance pourrait être meilleure. Ma question est que quelqu'un a de bons conseils ou une bonne ressource sur ce que nous devrions considérer lors de l'ajustement de ces valeurs.


0 commentaires

3 Réponses :


7
votes

Le Guide de performance d'Oracle Application Server pour la version 10G 3 (10.1.3.1) fournit des informations définitives sur Comment optimiser les paramètres de pool de connexion .

Les informations sont utiles pour presque tous les scénarios impliquant une application utilisant un pool de connexion permettant de gérer des connexions à une base de données Oracle, qui ne contient pas le serveur d'applications en cours d'utilisation.

Par exemple, il est toujours une bonne pratique pour définir une valeur pour la taille minimale de la piscine. En ce qui concerne la taille de la piscine maximale, la valeur ne doit pas être ouvertement élevée que cela puisse charger l'auditeur, en particulier si l'application a tendance à ne pas fermer les connexions entraînant une fuite.

Il est préférable de définir une valeur raisonnable pour le cache de relevé, car cela permet de mettre en cache des déclarations préparées, ce qui permet de mieux performer.

Les délais d'attente doivent également être choisis avec l'environnement. Par exemple, le délai d'attente de connexion ne doit pas être nul dans la plupart des cas, car cela pourrait provoquer des idées sqlexceptions lorsque des connexions physiques ne peuvent pas être initialisées dans le pool dans un intervalle suffisant. Le délai d'inactivité doit être suffisamment important pour que les connexions ne soient disposées qu'après une durée d'inactivité suffisante; Une valeur trop faible entraînerait la création de connexions physiques et tombées beaucoup trop fréquemment.

Edit: Les instructions données dans le guide de performance s'appliquent à la classe Oracle.JDBC.POOL.OracleDataSource, qui est ce que le serveur d'applications Oracle 10G utilise pour gérer les données de données dans une base de données Oracle. La plupart d'entre elles porteront certainement à l'oracleconnectionpooldaSource.


1 commentaires

InactivityTimeout: lorsque l'inactivitéTimeout expire, la connexion physique sous-jacente est fermée. Cependant, la taille du cache n'est pas autorisée à rétrécir en dessous de Minlimit, si elle est définie. - Ceci est de Oracle Docs et dit que Minlimit ne rétrécira pas même si tous les objets de connexion sont fermés par délai d'attente. Cela signifie-t-il que cela permet de vivre à l'intérieur de la piscine? docs.oracle.com/cd/b14117_01/java. 101 / B10979 / ...



2
votes

Mon premier conseil: profil.

Mon deuxième conseil: profil.

Qu'est-ce qui ralentit votre application, quels appels de méthode provoquent votre performance de l'application?

attendez-vous constamment de créer de nouvelles connexions? Ensuite, définissez votre minlimit sur plus de 0, même avec la «limite initiale» afin que vous ayez quelques-unes disponibles pour commencer. Si vous voulez que votre maxlimit soit à l'infini, réglez-le sur '0', un réglage de 0 indique aucune limite.

Créez-vous de nouvelles connexions lorsque vous devriez vraiment utiliser une connexion existante mais inactive? Définissez votre inactivité atactivité à quelque chose d'autre que la même chose pour AbandonedConnectionTimeout.

note, la première chose à bricoler serait la «limite initiale» -

de Oracle sur la limite initiale

Ceci définit la taille de la connexion cache lorsque le cache est initialement créé ou réinitialisé. Quand cela la propriété est définie sur une valeur plus grande 0, que de nombreuses connexions sont pré-créé et prêt à être utilisé. Cette propriété est généralement habituée à Réduisez le temps de «rampe» dans l'amorçage la cache de sa taille optimale.


0 commentaires

6
votes

Avez-vous envisagé d'utiliser le nouvel oracle UCP ? Citation du Liste de fonctions 11G (mettre l'accent sur la mine ):

1.4.1.29 Pool de connexion universel (UCP) pour JDBC

Le pool de connexion universel pour JDBC remplace le cache de connexion implicite et fournit les fonctions suivantes:

  • Étiquetage de connexion, récolte de connexion, journalisation et statistiques
  • performances et améliorations de stabilisation
  • Amélioration des diagnostics et des statistiques ou des métriques

    UCP pour JDBC fournit des fonctions de mise en commun de la connexion avancées, des performances améliorées et une meilleure diagnostic des problèmes de connexion.


2 commentaires

J'aime cette réponse. Malheureusement, nous ne pouvons pas passer aux nouveaux pilotes pour le moment.


Vous devriez considérer cela. IIRC La fonctionnalité de mise en commun de l'oracle DataSource a été obsolète en faveur de l'utilisation de l'UCP.