Hibernate-Start sehr langsam
Aus irgendeinem Grund, den Start von meinem hibernate-Anwendung ist unbarrably langsam. (bis zu 2 min)
Ich habe darüber nachgedacht, dass die c3p0-Konfiguration ist falsch ( stellt sich die Frage, ), aber das Studium der Protokolle zeigt, dass es keine Aktivität, nur, nachdem die Verbindung zum server aufgebaut. Auch mit dem built-in-polling-Funktionen Ruhezustand zeigt das gleiche Ergebnis.
Hier ist ein Ausschnitt aus den Protokollen:
20:06:51,248 DEBUG BasicResourcePool:422 - decremented pending_acquires: 0
20:06:51,248 DEBUG BasicResourcePool:1644 - trace com.mchange.v2.resourcepool.BasicResourcePool@1acaf0ed [managed: 3, unused: 2, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@5f873eb2)
20:06:51,248 DEBUG BasicResourcePool:1644 - trace com.mchange.v2.resourcepool.BasicResourcePool@1acaf0ed [managed: 3, unused: 2, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@5f873eb2)
20:06:51,273 DEBUG JdbcServicesImpl:121 - Database ->
name : PostgreSQL
version : 9.1.6
major : 9
minor : 1
20:06:51,274 DEBUG JdbcServicesImpl:127 - Driver ->
name : PostgreSQL Native Driver
version : PostgreSQL 9.2 JDBC4 (build 1002)
major : 9
minor : 2
20:06:51,274 DEBUG JdbcServicesImpl:133 - JDBC version : 4.0 ##### HANGS FOR 2 MINUTES ON THIS LINE #####
20:08:14,727 INFO Dialect:123 - HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect
20:08:14,736 INFO LobCreatorBuilder:120 - HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
20:08:14,736 DEBUG GooGooStatementCache:297 - checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 0; checked out: 0; num connections: 0; num keys: 0
20:08:14,736 DEBUG GooGooStatementCache:297 - checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 0; checked out: 0; num connections: 0; num keys: 0
20:08:14,883 DEBUG BasicResourcePool:1644 - trace com.mchange.v2.resourcepool.BasicResourcePool@1acaf0ed [managed: 3, unused: 2, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@5f873eb2)
20:08:14,883 DEBUG BasicResourcePool:1644 - trace com.mchange.v2.resourcepool.BasicResourcePool@1acaf0ed [managed: 3, unused: 2, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@5f873eb2)
20:08:14,883 DEBUG GooGooStatementCache:297 - checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 0; checked out: 0; num connections: 0; num keys: 0
(Bitte beachten Sie die #Kommentar -#.)
Ich habe auch versucht eine ältere Postgres-JDBC-Treiber ohne Glück zu löschen.
Verbindung zu einer lokalen Datenbank funktioniert gut. Verbindung wird sofort hergestellt und ich kann die Datenbank Abfragen. Diese remote-db ist ein Heroku dev-Instanz. Ich versuchte es mit einer anderen Fernbedienung auch. Gleiches Ergebnis.
Ich bin aus Ideen heraus, was kann ich jetzt prüfen, um loszuwerden, dieses ärgernis. Jede Hilfe wäre sehr geschätzt werden.
Vielleicht mein hibernate.cfg.xml hilfreich ist:
http://www.hibernate.org/dtd/hibernate-
configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">org.postgresql.Driver</property>
<property name="connection.url"/>
<property name="connection.default_schema"/>
<property name="connection.username"/>
<property name="connection.password"/>
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
<property name="current_session_context_class">thread</property>
<property name="hibernate.c3p0.acquire_increment">3</property>
<property name="hibernate.c3p0.min_size">3</property>
<property name="hibernate.c3p0.max_size">10</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.c3p0.acquireRetryDelay">500</property>
<property name="show_sql">true</property>
<property name="format_sql">false</property>
<property name="hbm2ddl.auto">validate</property>
<mapping class="core.entities.Exam" />
<mapping class="core.entities.Examination" />
...
</session-factory>
</hibernate-configuration>
EDIT: ich habe versucht, zu finden, der Grund für die Verzögerung über Protokolle und Profilierung, sondern wurden weitgehend erfolglos. (Ich bin nicht so Fortgeschritten in diesem Bereich, obwohl.) Am Ende ging ich mit versuchen und scheitern, und änderte meine db für eine remote-MySQL-Instanz zu prüfen, ob ein Unterschied Auftritt. Stellt sich heraus, dass die Verbindung hergestellt ist, fast sofort.
InformationsquelleAutor der Frage bentrm | 2013-01-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen Hibernate Langsam zu Erwerben Postgres-Verbindung
hibernate.temp.use_jdbc_metadata_defaults=false
Zu vermeiden, meta-Daten neu laden während der SessionFactory creation.
InformationsquelleAutor der Antwort Darryl Miles
Für Postgres, fügen Sie im application-config:
Erste Zeile ist erforderlich, wenn keine Bestimmung Dialekt
Ergebnisse
Vor:
~4 Minuten
Nach:
~1 minute
InformationsquelleAutor der Antwort Ricardo Spinoza
Wenn Sie ungewöhnlich langsam, dann haben Sie wahrscheinlich eine Sperre in Ihrer Anwendung, oder eine Ressource blockiert. In jedem Fall download VisualVM (JDK enthält jconsole, verdummt version) und überprüfen Sie, was Ihre threads machen, wo Sie stecken geblieben sind (threaddump) und wenn, gibt keine schnellen Antworten, schalten Sie den profiler.
InformationsquelleAutor der Antwort Mirko Adari
Welche Behälter verwendest du? c3p0 installiert werden soll, in den Behälter, e.g Tomcat. Wenn Sie mit unit-tests, für chrissakes, nicht mit einem connection pool. Wenn du es in tomcat, tun Sie das mit einer Ressource-tag und dann verbinden Sie es mit JNDI. Beste Weg, es zu tun.
InformationsquelleAutor der Antwort Rob