私は休止状態を使用していますが、パフォーマンスに問題があります。
ローカルデータベースで使用すると非常に高速ですが、リモートデータベース(およびリモートデータベースではローカルネットワーク)で非常に遅いです!
なぜですか?
リモートデータベース(PostgreSQL)でHibernateが非常に遅い
私はあなたが多分それは遅延読み込みの問題だと言うだろうが、私は、単純な(子供なし)1つのエンティティの選択が、それでも遅い上でそれをテストしている、これをチェック知っている:
public List<Employee> read() {
List<Employee> objects = null;
Transaction tx = null;
try {
tx = HibernateUtil.SESSION.beginTransaction();
Long start = System.currentTimeMillis();
objects = HibernateUtil.SESSION.createQuery("FROM Employee AS T ORDER BY T.id DESC").list();
Long stop = System.currentTimeMillis();
System.out.println("Time: " + (stop - start) + "ms.");
tx.commit();
} catch (HibernateException e) {
if (tx != null)
tx.rollback();
e.printStackTrace();
}
return objects;
}
することができますように簡単な選択クエリを参照してください、これは私が得る結果である:ローカル
:リモート31MS
:356ms !!!!
そして、これは私の設定ファイルである:あなたがこれを説明することができます
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.connection.username">postgres</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.url">jdbc:postgresql://192.168.1.3:5432/my_database</property>
<property name="connection_pool_size">1</property>
<property name="hbm2ddl.auto">update</property>
<property name="show_sql">false</property>
<property name="hibernate.enable_lazy_load_no_trans">true</property>
</session-factory>
</hibernate-configuration>
?
これはネットワーク遅延であり、データベースサーバーへのpingを見ている可能性があります。 – dbf
8〜4 msの間で高速です – SlimenTN
show_sqlをtrueにして特定の操作のSQLをダンプし、クライアントツールを使用して同じクエリ(読み取り専用クエリ)を実行しようとすると、ネットワークに関連する問題かどうかを確認できます。プロファイラを有効にしたJPA/JDBC(例:JProfiler)を使用してアプリケーションをプロファイリングする直接的な方法です。ターゲットのdbサーバがVM(ex VMware)内で実行されている場合、これはそのVM設定で問題になる可能性があります。 – hunter