【问题标题】:Hibernate is so slow on remoted database (Postgresql)Hibernate 在远程数据库(Postgresql)上太慢了
【发布时间】: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 不是同一个人,他在查询中遇到问题并修复了它,但我只是使用了一个简单的选择查询,而且速度很慢。

标签: java hibernate


【解决方案1】:

你需要配置一个连接池

原因:The anatomy of Connection Pooling

例如,您可以将 C3P0 与 Postgresql 一起使用:

问候

【讨论】:

  • 感谢您的回答,这是了解连接池的更多信息的一扇门,它非常有用,可以为您提供更好的数据库连接体验。这解决了问题的一半(也是最重要的一个),后半部分是优化我的查询。再次感谢:)
猜你喜欢
  • 2013-11-21
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 2018-06-10
  • 1970-01-01
相关资源
最近更新 更多