Hallo,
ich habe massive Performance Probleme wenn ich mit Hibernate auf die DB Querys absetze.
Ich verwende Hibernate3
Die Datenbank hat ca. 22 Millionen Datensätze.
Setze ich die Querys als Nativ SQL ab brauchen 100 Abfragen ca.: 5 Sekunden.
Setze ich die selben mit Hql ab, brauchen Sie 155 Sekunden.
Folgendes habe ich konfiguriert:
persistence.xml
Der Code:
Hat wer einen Tipp?
Danke
ich habe massive Performance Probleme wenn ich mit Hibernate auf die DB Querys absetze.
Ich verwende Hibernate3
Die Datenbank hat ca. 22 Millionen Datensätze.
Setze ich die Querys als Nativ SQL ab brauchen 100 Abfragen ca.: 5 Sekunden.
Setze ich die selben mit Hql ab, brauchen Sie 155 Sekunden.
Folgendes habe ich konfiguriert:
persistence.xml
Code:
<persistence-unit name="testOnDb2Test" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.DB2Dialect" />
<property name="connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/>
<property name="hibernate.connection.url" value="jdbc:db2://localhost:50000/ODB" />
<property name="hibernate.connection.username" value="xxx" />
<property name="hibernate.connection.password" value="xxx" />
<property name="hibernate.default_schema" value="xxx" />
<property name="hibernate.cache.use_query_cache" value="true" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="false" />
<property name="hibernate.c3p0.min_size" value="5"/>
<property name="hibernate.c3p0.max_size" value="20"/>
<property name="hibernate.c3p0.timeout" value="300"/>
<property name="hibernate.c3p0.max_statements" value="50"/>
<property name="hibernate.c3p0.maxStatementsPerConnection" value="50"/>
<property name="hibernate.c3p0.idle_test_period" value="300000"/>
<!--
-->
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
<property name="hibernate.generate_statistics" value="false" />
</properties>
</persistence-unit>
Der Code:
Code:
StringBuffer queryString2 = new StringBuffer();
queryString2
.append("select model.id.mid from Table model where model.id.id = ?");
queryString2.append(" and model.creatstamp < ? ");
queryString2
.append(" and (model.businesstype=? or model.businesstype=? or model.businesstype=? or model.businesstype=?) ");
queryString2.append(" and (model.state = ? or model.state = ?) ");
for(int c = 0; c < 100; c++){
Query query = this.entityManager.createQuery(queryString2.toString());
org.hibernate.ejb.QueryImpl q = (org.hibernate.ejb.QueryImpl)query;
q.getHibernateQuery().setCacheable(true);
query.setParameter(1, new Long(116));
query.setParameter(2, new Timestamp(new Date().getTime()));
query.setParameter(3, "O");
query.setParameter(4, "T");
query.setParameter(5, "I");
query.setParameter(6, "C");
query.setParameter(7, "S");
query.setParameter(8, "E");
System.out.println("Before Execute the Query");
List<Disposition> dispositionList = query.getResultList();
System.out.println("After Execute");
int x = 1;
for (Disposition disposition : dispositionList) {
System.out.print("Nr:" + (x++));
System.out.println(disposition.getId());
}
}
Hat wer einen Tipp?
Danke