Per qualche motivo, l'avvio della mia applicazione di ibernazione è lentamente lento. (fino a 2 minuti) Ho pensato che la configurazione di c3p0 fosse errata (related question) ma lo studio dei log mostra che non c'è attività subito dopo aver stabilito la connessione al server. Inoltre, l'utilizzo delle funzionalità di polling incorporate di Hibernate mostra lo stesso risultato.Hibernate startup molto lento
Ecco un frammento dai registri:
20:06:51,248 DEBUG BasicResourcePool:422 - decremented pending_acquires: 0
20:06:51,248 DEBUG BasicResourcePool:1644 - trace [email protected] [managed: 3, unused: 2, excluded: 0] (e.g. [email protected])
20:06:51,248 DEBUG BasicResourcePool:1644 - trace [email protected] [managed: 3, unused: 2, excluded: 0] (e.g. [email protected])
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 [email protected] [managed: 3, unused: 2, excluded: 0] (e.g. [email protected])
20:08:14,883 DEBUG BasicResourcePool:1644 - trace [email protected] [managed: 3, unused: 2, excluded: 0] (e.g. [email protected])
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
(Si prega di mente il commento # #.)
Ho provato anche un vecchio driver JDBC Postgres senza fortuna di sorta.
La connessione a un database locale funziona correttamente. La connessione viene stabilita immediatamente e posso interrogare il database. Questo db remoto è un'istanza di Heroku dev. L'ho provato anche con un altro telecomando. Stesso risultato
Sono fuori di idee quello che posso controllare ora per sbarazzarsi di questo fastidio. Qualsiasi aiuto sarebbe molto apprezzato.
Forse il mio hibernate.cfg.xml è utile:
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: ho cercato di trovare la ragione della ritardare tramite i log e la profilatura, ma non ci sono riusciti con successo. (Non sono così avanzato in quest'area però.) Alla fine sono andato con try e fail e ho cambiato il mio db per un'istanza MySQL remota per verificare se si verifica qualche differenza. Risulta, che la connessione è stabilita quasi immediatamente.
Prova una profiler, altrimenti si è solo indovinare il motivo per cui è così lento. – Robin
Solo un sospetto, ma potresti voler controllare la tua rete, forse il DNS? Prova a utilizzare l'IP del tuo server invece del nome del server. Sembra un po 'come se fosse in attesa di un timeout. –
Sì, questo odora di problemi di rete – demaniak