【发布时间】:2016-09-19 16:01:02
【问题描述】:
我正在使用休眠,但我遇到了性能问题!
当我在本地数据库上使用它时,它非常快但在远程数据库上非常慢(我的意思是在本地网络中的远程数据库)!!
为什么?!!
我知道你会说这可能是一个延迟加载问题,但我已经在一个实体(没有子实体)的简单选择中对其进行了测试,但仍然很慢,请查看:
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 操作。
-
它在 8 到 4 毫秒之间很快
-
使 show_sql 为 true 并转储给定操作的 SQL,并尝试使用客户端工具执行相同的查询(只读查询),您可以查看它是否与网络相关的问题。使用启用了探查器的 JPA/JDBC(例如:JProfiler)来剖析应用程序的直接方式。如果目标数据库服务器在 VM(例如 VMware)中运行,这可能是该 VM 配置中的问题。
-
@RohitGaikwad 不是同一个人,他在查询中遇到问题并修复了它,但我只是使用了一个简单的选择查询,而且速度很慢。