These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Hibernate et connexion jdbc sur Oracle
PostPosted: Fri Apr 14, 2006 5:34 am 
Regular
Regular

Joined: Sat May 15, 2004 4:27 am
Posts: 79
Bonjour a tous,

je travaille sur une application java. J'attaque un serveur Oracle 9i via Java/Jdbc.
Après mettre rendu compte que par défaut Oracle ne retournait que 10, j'ai trouvé un
paramètre magique qui m'a permi d'améliorer grandement le temps de balayage de mon
resultset : defaultRowPrefetch. J'ai donc mis ce parametre dans le oracle-ds.xml de
mon serveur Jboss à 50.

Le prb que je constate est que dans le temps la récupération des 50 tuples devient de
plus en long. Dans le temps la base prends aussi pas mal de volume. D'où ma question
comment faire pour garder un temps de récupération constant en dépit de la taille de la
base qui augmente.

J'utilise le framework Hibernate. Mais pour faire ma requete je récupere une pure
connection JDBC via Hibernate (2.1.6). Un peu de code.

Dans JBoss mon oracle-ds.xml ressemble à ça :

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>OracleDS</jndi-name>
<connection-url>jdbc:oracle:thin:@<IP>:<PORT>:<SID></connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>seb</user-name>
<password>seb</password>
<connection-property name="defaultRowPrefetch">50</connection-property>
<blocking-timeout-millis>5000</blocking-timeout-millis>
<idle-timeout-minutes>15</idle-timeout-minutes>
<max-pool-size>20</max-pool-size>
<min-pool-size>10</min-pool-size>
<check-valid-connection-sql>select 1 from dual</check-valid-connection-sql>
</local-tx-datasource>
</datasources>

Le code Java ressemble à ça :

// Partie 1)
Connection cnx = HibernateCnx.getSession().getConnection();
PreparedStatement ps = cnx.prepareStatement("SELECT * FROM ...");
ps.setString(1, idAuto);
ps.setInt(2, cntTacheRetour);
ResultSet rs = ps.executeQuery();
rs.setFetchDirection(ResultSet.FETCH_FORWARD);

// Partie 2)
while (rs.next()) {

// Traitement (getter/setter)
// Récupération des champs de la requete

}

Le temps d'exécution de la requete est stable en dépit du volume dans la base. Mais
le temps de récupération varie en fonctionne du volume (partie 2). Qui sait quels
sont les paramètres à utiliser pour garder un temps dans cette partie aussi.

Merci (espérant que j'ai été clair)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.